O que é e para que serve?
Diferente das aplicações win32 e .net você pode criar uma aplicação que irá ser executada em background como um serviço do Windows. Nessa artigo irei mostrar a vocês como é simples criar esse tipo de aplicativo que poderá ser utilizado para verificar o número de usuários que estão on-line no seu sistema Win32 feito em Delphi, também poderá ser utilizado para criação de uma rotina de backup que será executada a cada 3 horas, como uma rotina que deverá ficar checando a cotação do Dolar e atualizando os dados do seu sistema, em fim, existem várias utilidades para se criar esse tipo de sistema.
Como começar?
Abra o delphi e clique em File | New | Project | Marque a opção Delphi Project | Clique em Service Application. Salve tudo. Mude o nome da Unit para Principal e o nome do Projeto para MySerivce.
Entendendo as propriedades e eventos
Após criar o seu serviço as propriedades AllowPause e AllowStop estarão marcadas como True. Isso acontece quando você deseja permitir que a sua aplicação possa ser Pausada ou Interrompida (Parada) por um usuário que tem acesso ao Gerenciador de Serviços do Windows em Painel de Controle | Ferramentas | Serviços.
Você também tem uma propriedade chamada Dependencies que é uma coleção de outros serviços. Isso acontece porque você pode precisar criar um serviço que dependa da execução de outro que deverá estar rodando. POr exemplo: Eu posso criar um serviço que para ter êxito durante a sua execução eu precise garantir que o serviço de chamadas remotas esteja em execução.
A propriedade DisplayName contém o nome do serviço como aparecerá no Gerenciar de Serviços após sua execução. Se você precisa que o seu serviço seja executado com credencias de um usuário que tem privlégios especiais você deverá informar o contéudo das propriedades ServiceStartName (nome do usuário) e Password (sua senha).
Quanto a especificação dos Eventos já são bem descritivos. O próprio nome descreve a sua funcionalidade. Para entendermos como eles funcionam vamos criar uma procedure em nosso serviço que irá preencher um log sempre que um dos eventos for disparado.
Codificando
Mude o nome das propriedades DisplayName e Name para MyService e srvPrincipal respectivamente. Agora escreva o código abaixo:
Agora que criamos a nossa rotina para gerar o log vamos utilizá-la em cada evento da nossa aplicação. Aqui vai a dica de ouro meus amigos. Quando o evento OnExecute termina a sua execução a Theread que gerencia o serviço termina. Então você precisa implementar um artifício para ficar chamando o método ProcessRequest até que sua aplicação seja definitavemte interrompida pelo usuário. Se você não implementar o código abaixo no Evento OnExecute do seu serviço ele não terá qualquer funcionalidade.
procedure ServiceController(CtrlCode: DWord); stdcall;
begin srvPrincipal.Controller(CtrlCode); end;
function TsrvPrincipal.GetServiceController: TServiceController;
begin Result := ServiceController; end;
procedure TsrvPrincipal.ServiceAfterInstall(Sender: TService);
begin doSaveLog('ServiceAfterInstall'); end;
procedure TsrvPrincipal.ServiceAfterUninstall(Sender: TService);
begin doSaveLog('ServiceAfterUninstall'); end;
procedure TsrvPrincipal.ServiceBeforeInstall(Sender: TService);
begin doSaveLog('ServiceBeforeInstall'); end;
procedure TsrvPrincipal.ServiceBeforeUninstall(Sender: TService);
begin doSaveLog('ServiceBeforeUninstall'); end;
procedure TsrvPrincipal.ServiceContinue(Sender: TService;
var Continued: Boolean); begin doSaveLog('ServiceContinue'); end;
procedure TsrvPrincipal.ServiceCreate(Sender: TObject);
begin doSaveLog('ServiceCreate'); end;
procedure TsrvPrincipal.ServiceDestroy(Sender: TObject);
begin doSaveLog('ServiceDestroy'); end;
procedure TsrvPrincipal.ServiceExecute(Sender: TService);
begin doSaveLog('ServiceExecute');
while not self.Terminated do
ServiceThread.ProcessRequests(true); end;
procedure TsrvPrincipal.ServicePause(Sender: TService; var Paused: Boolean);
begin doSaveLog('ServicePause'); end;
procedure TsrvPrincipal.ServiceShutdown(Sender: TService);
begin doSaveLog('ServiceShutdown'); end;
procedure TsrvPrincipal.ServiceStart(Sender: TService; var Started: Boolean);
begin doSaveLog('ServiceStart'); end;
procedure TsrvPrincipal.ServiceStop(Sender: TService; var Stopped: Boolean);
begin doSaveLog('ServiceStop'); end;
Instalando o Serviço
Diferente de nossas aplicações Win32 que só é necessário Instalar o BDE, copiar EXE, ou dlls do DBExpress. Quando falamos de serviço temos que instalá-lo por meio de linhas de comando. Façamos assim: Compile o seu serviço e copie o executável para dentro da pasta c:\windows | abra o prompt de comando e digite a linha abaixo:
Para desinstalar o serviço basta executar a linha de comando: MyService /uninstall
Executando o Serviço e tetando o Log
Agora que criamos e instalamos vamos verificar se ele está funcionando corretamente. Em painel de contorle | ferramentas | serviços | você deverá encontrar um serviço na relação do gerenciador.
Agora você pode executar, parar, pausar e reinicar e verificar as informações no log que foi gerado dentro do caminho c:\log.log. Veja como ficou o meu log depois de executar os comandos:
log.log
10:03:40:ServiceCreate
10:03:40:ServiceStart 10:03:40:ServiceExecute 10:03:43:ServicePause 10:03:46:ServiceStop 10:03:46:ServiceDestroy 10:03:49:ServiceCreate 10:03:49:ServiceStart 10:03:49:ServiceExecute 10:03:51:ServiceStop 10:03:51:ServiceDestroy 10:03:52:ServiceCreate 10:03:52:ServiceStart 10:03:52:ServiceExecute
[ Fonte ]
|
09/06/2010
Assinar:
Postar comentários (Atom)
0 comentários:
Postar um comentário