Login
Estamos no Facebook
Buscar
Quem está conectado
Há 24 usuários online :: 1 usuário cadastrado, Nenhum Invisível e 23 Visitantes :: 2 Motores de buscathiag0ms
[ Ver toda a lista ]
O recorde de usuários online foi de 468 em 1/3/2012, 10:43
Brasília
| |
Estamos no Twitter

Nossa Comunidade

Nosso Grupo

Últimos assuntos
Top dos mais postadores
| Marcos Guedes | ||||
| hugo | ||||
| alceu11 | ||||
| Julio | ||||
| m@r<3|o | ||||
| mfelis | ||||
| Tales Ruan | ||||
| Nelson Arcas | ||||
| _batmanvfp_ | ||||
| marcio |
Karaoke feito em FoxPro 2.6
23/5/2012, 11:45 por fabiomacarrao
Bom dia a todos. Desenvolvi um programa em FoxPro for windows 2.6 para karaoke. tenho mais de 2700 …
Comentários: 3
Estatísticas
Temos 4048 usuários registradosO último usuário registrado atende pelo nome de fabiomacarrao
Os nossos membros postaram um total de 14433 mensagens em 2047 assuntos
Serviços do Windows
Página 1 de 1 • Compartilhe •
Serviços do Windows
Abaixo segue uma ótima rotina para incluir e remover serviços no windows. (Não fui eu quem fiz!)
Fiz uma pequena adaptação, mas a quem interessar, poderá analisar a rotina original no seguinte link:
- [Você precisa estar registrado e conectado para ver este link.]
Fiz uma pequena adaptação, mas a quem interessar, poderá analisar a rotina original no seguinte link:
- [Você precisa estar registrado e conectado para ver este link.]
- Código:
/// <sumary>
/// Fonte: http://[Você precisa estar registrado e conectado para ver este link.]
/// </sumary>
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace Servicos
{
public class InstalarServico
{
private string caminhoServico = "";
private string nomeServico = "";
private string nomeExibicao = "";
private string mensagemStatus = ""; // Armazena o status da operação
private TextBox txtStatus = null;
#region Importando DLL's
[DllImport("advapi32.dll")]
private static extern IntPtr OpenSCManager(string lpMachineName, string lpSCDB, int scParameter);
[DllImport("Advapi32.dll")]
private static extern IntPtr CreateService(IntPtr SC_HANDLE, string lpSvcName, string lpDisplayName,
int dwDesiredAccess, int dwServiceType, int dwStartType, int dwErrorControl, string lpPathName,
string lpLoadOrderGroup, int lpdwTagId, string lpDependencies, string lpServiceStartName, string lpPassword);
[DllImport("advapi32.dll")]
private static extern void CloseServiceHandle(IntPtr SCHANDLE);
[DllImport("advapi32.dll")]
private static extern int StartService(IntPtr SVHANDLE, int dwNumServiceArgs, string lpServiceArgVectors);
[DllImport("advapi32.dll", SetLastError = true)]
private static extern IntPtr OpenService(IntPtr SCHANDLE, string lpSvcName, int dwNumServiceArgs);
[DllImport("advapi32.dll")]
private static extern int DeleteService(IntPtr SVHANDLE);
[DllImport("kernel32.dll")]
private static extern int GetLastError();
#endregion
public void setCaminhoServico(string caminho)
{
/**
* Altera o caminho do serviço
*/
this.caminhoServico = caminho;
}
public void setNomeServico(string nome)
{
/**
* Altera o nome do serviço
*/
this.nomeServico = nome;
}
public void setNomeExibicao(string nome)
{
/**
* Altera o nome para exibição
*/
this.nomeExibicao = nome;
}
public void setTxtStatus(TextBox txtStatus)
{
this.txtStatus = txtStatus;
}
public string getMensagemStatus()
{
/**
* Retorna a mensagem de status da operação.
*/
return this.mensagemStatus;
}
public bool instalarServico()
{
/**
* Instala o serviço
*/
#region Verifica se as variáveis necessárias estão preenchidas
if (
(this.caminhoServico.Length == 0) ||
(this.nomeServico.Length == 0) ||
(this.nomeExibicao.Length == 0)
)
{
this.mensagemStatus = "Campos não preenchidos";
if (this.txtStatus != null)
this.txtStatus.Text += "\r\n" + this.mensagemStatus;
this.mensagemStatus = "Campos não preenchidos";
return false;
}
#endregion
#region Declaração de constantes
int SC_MANAGER_CREATE_SERVICE = 0x0002;
int SERVICE_WIN32_OWN_PROCESS = 0x00000010;
//int SERVICE_DEMAND_START = 0x00000003;
int SERVICE_ERROR_NORMAL = 0x00000001;
int STANDARD_RIGHTS_REQUIRED = 0xF0000;
int SERVICE_QUERY_CONFIG = 0x0001;
int SERVICE_CHANGE_CONFIG = 0x0002;
int SERVICE_QUERY_STATUS = 0x0004;
int SERVICE_ENUMERATE_DEPENDENTS = 0x0008;
int SERVICE_START = 0x0010;
int SERVICE_STOP = 0x0020;
int SERVICE_PAUSE_CONTINUE = 0x0040;
int SERVICE_INTERROGATE = 0x0080;
int SERVICE_USER_DEFINED_CONTROL = 0x0100;
int SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED |
SERVICE_QUERY_CONFIG |
SERVICE_CHANGE_CONFIG |
SERVICE_QUERY_STATUS |
SERVICE_ENUMERATE_DEPENDENTS |
SERVICE_START |
SERVICE_STOP |
SERVICE_PAUSE_CONTINUE |
SERVICE_INTERROGATE |
SERVICE_USER_DEFINED_CONTROL);
int SERVICE_AUTO_START = 0x00000002;
#endregion Constants declaration.
try
{
IntPtr sc_handle = OpenSCManager(null, null, SC_MANAGER_CREATE_SERVICE);
if (sc_handle.ToInt32() != 0)
{
IntPtr sv_handle = CreateService(sc_handle, this.nomeServico, this.nomeExibicao,
SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL,
this.caminhoServico, null, 0, null, null, null);
if (sv_handle.ToInt32() == 0)
{
CloseServiceHandle(sc_handle);
this.mensagemStatus = "Não foi possível instalar o serviço";
if (this.txtStatus != null)
this.txtStatus.Text += "\r\n" + this.mensagemStatus;
return false;
}
else
{
// Inicia o serviço
int i = StartService(sv_handle, 0, null);
// Se o valor de i for zero, então houve um erro ao iniciar o serviço.
// Obs: O erro pode ocorrer se o serviço já esteja funcionando ou algum outro problema.
if (i == 0)
{
this.mensagemStatus = "Não foi possível iniciar o serviço";
if (this.txtStatus != null)
this.txtStatus.Text += "\r\n" + this.mensagemStatus;
return false;
}
this.mensagemStatus = "Serviço iniciado com sucesso";
if (this.txtStatus != null)
this.txtStatus.Text += "\r\n" + this.mensagemStatus;
CloseServiceHandle(sc_handle);
return true;
}
}
else
{
this.mensagemStatus = "SCM não foi aberto com sucesso";
if (this.txtStatus != null)
this.txtStatus.Text += "\r\n" + this.mensagemStatus;
return false;
}
}
catch (Exception oErro)
{
this.mensagemStatus = oErro.Message;
if (this.txtStatus != null)
this.txtStatus.Text += "\r\n" + this.mensagemStatus;
return false;
}
}
public bool desinstalarServico()
{
/**
* Desinstala o serviço
*/
#region Verifica se as variáveis necessárias estão preenchidas
if (this.nomeServico.Length == 0)
{
this.mensagemStatus = "Campos não preenchidos";
if (this.txtStatus != null)
this.txtStatus.Text += "\r\n" + this.mensagemStatus;
return false;
}
#endregion
int GENERIC_WRITE = 0x40000000;
IntPtr sc_hndl = OpenSCManager(null, null, GENERIC_WRITE);
if (sc_hndl.ToInt32() != 0)
{
int DELETE = 0x10000;
IntPtr svc_hndl = OpenService(sc_hndl, this.nomeServico, DELETE);
//Console.WriteLine(svc_hndl.ToInt32());
if (svc_hndl.ToInt32() != 0)
{
int i = DeleteService(svc_hndl);
if (i != 0)
{
CloseServiceHandle(sc_hndl);
this.mensagemStatus = "Serviço deletado com sucesso";
if (this.txtStatus != null)
this.txtStatus.Text += "\r\n" + this.mensagemStatus;
return true;
}
else
{
CloseServiceHandle(sc_hndl);
this.mensagemStatus = "Não foi possível excluir o serviço especificado";
if (this.txtStatus != null)
this.txtStatus.Text += "\r\n" + this.mensagemStatus;
return false;
}
}
else
{
this.mensagemStatus = "Não foi possível excluir o serviço especificado";
if (this.txtStatus != null)
this.txtStatus.Text += "\r\n" + this.mensagemStatus;
return false;
}
}
else
{
this.mensagemStatus = "Não foi possível excluir o serviço especificado";
if (this.txtStatus != null)
this.txtStatus.Text += "\r\n" + this.mensagemStatus;
return false;
}
}
/*
public static void Main()
{
string caminhoServico = @"C:\servico\servico.exe";
string nomeServico = "Nome do Serviço";
string nomeExibicao = "Nome para exibição";
InstalarServico obj = new InstalarServico();
obj.setCaminhoServico(caminhoServico);
obj.setNomeServico(nomeServico);
obj.setNomeExibicao(nomeExibicao);
obj.instalarServico();
}
*/
}
}
Última edição por Marcos Guedes em 19/8/2010, 10:19, editado 1 vez(es)
Marcos Guedes- Webmaster

Re: Serviços do Windows
Abaixo segue um aplicativo que fiz para testar a rotina:
- [Você precisa estar registrado e conectado para ver este link.]
A quem interessar, segue o link do projeto:
- [Você precisa estar registrado e conectado para ver este link.]
- [Você precisa estar registrado e conectado para ver este link.]
A quem interessar, segue o link do projeto:
- [Você precisa estar registrado e conectado para ver este link.]
Marcos Guedes- Webmaster

Re: Serviços do Windows
Marcos,
Vou aproveitar seu topico para colocar aqui como fazer uma aplicação de Serviços do Windows.
Neste link abaixo explica toda a montagem e até a geração do instalador para rodar a aplicação.
[Você precisa estar registrado e conectado para ver este link.]
Para complementar, na minha aplicação fiz ele iniciar a aplicação a partir de uma caminho em um arquivo de texto.
No Metodo OnStart.
Para fechar a aplicação:
No Metodo OnStop
Vou aproveitar seu topico para colocar aqui como fazer uma aplicação de Serviços do Windows.
Neste link abaixo explica toda a montagem e até a geração do instalador para rodar a aplicação.
[Você precisa estar registrado e conectado para ver este link.]
Para complementar, na minha aplicação fiz ele iniciar a aplicação a partir de uma caminho em um arquivo de texto.
No Metodo OnStart.
- Código:
protected override void OnStart(string[] args)
{
string sysDrive = System.Environment.GetEnvironmentVariable("SystemDrive") + @"";
string filePath = Path.Combine(sysDrive, "arquivo.txt");
FileInfo lcArquivo = new FileInfo(@filePath);
TextReader reader = lcArquivo.OpenText();
string localArquivo = reader.ReadLine();
reader.Close();
Process.Start(@localArquivo);
}
Para fechar a aplicação:
No Metodo OnStop
- Código:
protected override void OnStop()
{
Process[] processInMachine = Process.GetProcesses();
foreach (Process itemProcess in processInMachine)
{
if (itemProcess.ProcessName == "integracao")
{
int pid = itemProcess.Id;
Process procSel = Process.GetProcessById(pid);
procSel.Kill();
}
}
}
anderson_rodrigo- Começando a Participar

Re: Serviços do Windows
Reputado, Anderson!


_________________
Marcos Guedes - Programador e desenvolvedor Web.
Convidado, seja nosso seguidor no Twitter:
twitter.com/programacaobras
Marcos Guedes- Webmaster

Página 1 de 1
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum
Início
» Modificar TitleBar e Icone do Executavel.
» Criar atalho, SYS(2020) e Desktop
» Karaoke feito em FoxPro 2.6
» Como separar caminho do diretório?
» Utilizando PHPMailer
» Programador em Visual Foxpro
» Link PHP (Dúvida)
» Fundo do PROJETO Transparente??
» Minimizar , Maximizar e Restaurar
» Pivot Table no sql server
» Scroll EditBox Automatico
» Select Nexval do FoxPro no OracleXE
» Colocar gif na caixa do MESSAGEBOX ()
» Comparar Versões do programa.exe
» Menu lateral
» Fazer com que a tela do sistema assume a janela principal
» Trocar Palavra no Sistema
» invocar Dll em Xbase
» Fechar Porta Aberta