Olá, caros leitores! Nesse artigo veremos como criar serviços do Windows que usam interface gráfica.
Estou utilizando Delphi 2007, mas pode ser criado em outras versões também.
Resolvi criar esse tipo de artigo porque é muito difícil encontrar uma matéria completa na internet que nos ajude e atenda a nossa necessidade. Temos que procurar muito e ler vários textos até conseguir o que queremos. Geralmente quando estamos atrás de uma informação é porque precisamos dela o mais rápido possível, com o maior nível de detalhes que pudermos encontrar e de forma objetiva, não é?
Nosso trabalho foi dividido em três partes, são elas:
- Primeiros passos para criação do serviço – Parte 01
- Criação de Threads para trabalhar com o serviço criado – Parte 02
- Criação da tela de interação com o usuário – Parte 03
1. Primeiros passos para criação do serviço
1.1 Introdução
a. O que é um serviço?
Um serviço do Windows é uma aplicação que roda em segundo plano executando operações sem a intervenção do usuário e continua rodando enquanto o Windows estiver em execução.
Essas operações podem ser consultas a um FTP para verificar se há atualizações de um software, consultas a um banco de dados, monitoramento de arquivos ou as operações do usuário, pode ser uma aplicação servidora, leia o artigo Aplicação Multi-camadas para aprender como criar aplicação servidora, enfim, temos várias funcionalidades que podemos colocar em um serviço para ele fazer.
O serviço é carregado logo que o Windows é iniciado, mesmo que você esteja na tela de login do Windows o serviço já é executado e fica residente na memória executando as operações na qual foi programado para fazer.
b. Acessando o gerenciador de serviços do Windows
Para acessarmos o gerenciador de serviços do Windows e visualizar todos os serviços que estão instalados e que estão rodando em nosso computador, siga os seguintes passos:
Vá ao painel de controle –> Escolha ferramentas administrativas –> Escolha serviços
ou
Iniciar –> Executar –> Digite services.msc e clique em OK.
Irá exibir uma janela como a exibida a seguir:
Ao selecionar um serviço ele mostra do lado esquerdo o nome e algumas ações que podemos executar no serviço selecionado como Iniciar, Parar ou Reiniciar. Do lado direito temos a Descrição do serviço, Status e Tipo de inicialização.
OBS: Importante!!! Não é possível criar serviços para Windows 95, 98 ou ME. Para trabalhar com serviços é necessário que o Windows seja NT, 2000, 2003 ou XP.
1.2 Criando serviço no Delphi
Abra o Delphi e selecione File -> New -> Other.
Irá exibir a janela a seguir:
Escolha a categoria Delphi Projects e a opção Service Application dentro dessa categoria e clique em OK.
Ao clicar em OK irá abrir uma tela como a exibida abaixo:
Antes de continuarmos, vamos salvar nosso projeto.
Vá no menu File e clique em Save All.
Salve a unit com o nome untPrincipal e o projeto como ServicoWindows.
Clique na unit untPrincipal, pressione a tela F12 para visualizarmos o form.
OBS: Como é possível observar, esse formulário parece com um DataModule, permite colocarmos somente componentes não visuais nele.
a. Conhecendo as propriedades:
A seguir descrevo algumas propriedades importantes da classe TService:
- AllowPause -> Quando true indica que o serviço pode ser pausado. Deixe como está.
- AllowStop -> Quanto true indica que o serviço pode ser parado. Deixe como está.
- DisplayName -> Especifica o nome do serviço que irá aparecer no gerenciador de serviços do Windows, na coluna Nome. Digite o nome Criando Serviços para Windows com Delphi nessa propriedade.
- Interactive -> Quando true indica se haverá interação com o Windows ou com o usuário. Como essa é a finalidade de nosso artigo, coloque essa propriedade para true.
- Name -> Nome do nosso serviço, é a mesma coisa quando damos um nome a um formulário, um botão ou um data module. Digite o nome srvPrincipal nessa propriedade.
- StartType ->Define a forma com que o serviço será iniciado. Vamos deixar stAuto mesmo.
b. Conhecendo os eventos:
A seguir descrevo os eventos da classe TService:
- AfterInstall -> Ocorre após o nosso serviço ser registrado no gerenciador de serviços do windows.
- AfterUninstall -> Ocorre após ser removido do gerenciador de serviços do windows.
- BeforeInstall -> Ocorre antes de o serviço ser registrado no gerenciador de serviços do windows.
- BeforeUninstall -> Ocorre antes de ser removido do gerenciador de serviços do windows.
- OnContinue ->Ocorre após receber o comando de continuar a execução após ser pausado.
- OnExecute -> Junto com o serviço existe uma thread que é executada com ele. Esse evento ocorre quando essa thread é iniciada.
- OnPause -> Ocorre após o serviço ser pausado temporariamente.
- OnStart -> Ocorre após o serviço ser iniciado, esse evento ocorre primeiro que o evento OnExecute.
- OnStop -> Ocorre quando o serviço é parado pelo gerenciador de serviços do Windows.
c. Programando o serviço:
Agora que nós conhecemos as propriedades e eventos mais importantes da classe TService, vamos começar a programação.
Declare a unit Registry na sessão uses da nossa unit, como mostrado abaixo:
Dê um duplo clique no evento AfterInstall e digite o seguinte código:
No começo do nosso artigo foi mostrado como fazer para exibir o gerenciador de serviços do Windows. Vimos que ao lado da coluna Nome, é exibida a descrição do serviço. A rotina acima é responsável por colocar essa descrição no nosso serviço.
A única tarefa que o nosso serviço faz até agora é colocar a descrição, mas já podemos testar nossa aplicação.
Compile nossa aplicação com CTRL F9, clique em Iniciar e em seguida escolha Executar. Digite o caminho completo de onde sua aplicação foi salva e o nome do executável. Coloque ao final do nome do executável /install.
Ex.: E:\\Sistemas\\Servicos\\Parte01\\ServicoWindows.exe /install
Você irá receber uma mensagem que o serviço foi instalado com sucesso.
Abra o gerenciador de serviços do Windows e procure o serviço criado. Procure pelo nome que colocou em DisplayName.
Para desinstalar o serviço digite o mesmo caminho e ao invés de digitar /install digite /uninstall.
Ex.: E:\\Sistemas\\Servicos\\Parte01\\ServicoWindows.exe /uninstall
Pronto, os passos mais importantes para criarmos um serviço para Windows foram vistos nesse artigo. Acabamos de conhecer os conceitos, o que é um serviço, onde fica instalado, para que serve e como criar uma aplicação simples. Essas características são importantes para que nosso trabalho seja bem feito.
Parabéns por ter chegado até aqui. Até o próximo artigo.