Voltando exatamente da onde paramos na parte 1, quando o Windows instala um serviço ele usa um contexto, que é o de determinar quais privilégios este serviço pode e deve usar. Então precisamos incluir em nosso projeto a uma conta de sistema, que será o contexto que o Windows necessita para instalar o serviço. Os tipos de contas existentes são:

- Local Service – direciona o Windows para rodar o serviço no contexto de uma conta no sistema local que pode ter privilégios estendidos.

- Network Service – direciona o Windows para rodar o serviço no contexto de uma conta sem privilégios no sistema local. O serviço apresentará as credenciais a um servidor remoto (usado com vários computadores em uma rede, por exemplo).

- Local System – direciona o Windows para rodar o serviço no contexto de uma conta sem privilégios no sistema local. O serviço apresentará credenciais anônimas para o servidor remoto.

- User – direciona o Windows para rodar o serviço no contexto que solicita ao usuário um nome e senha válidos a cada momento que o serviço rodar.

Neste exemplo iremos usar a conta Local System.

Aperte F4 em cima do serviceInstaller1 e altere as propriedades DisplayName e ServiceName para ExemploServico, que será o nome do nosso serviço, que será exibido no gerenciador de serviços.

Aperte F4 em cima do serviceProcessInstaller1 e altere a propriedade Account para Local System, que será o tipo de conta que explicamos anteriormente.

Agora compile sua aplicação apertando CTRL + SHIFT + B.

Para instalarmos nosso serviço, temos que usar o InstallUtil, utilitário específico do .NET para instalar serviços no Windows. Ele se encontra na pasta do .NET Framework. Então, vá em Iniciar e clique em Executar e digite cmd para abrirmos o prompt de comando do MS-DOS.

Nele digite cd\ para irmos à raiz de nossa unidade. Nela digite o seguinte:



Acima digitei cd + o caminho para se chegar a pasta em que está meu utilitário InstallUtil, e na linha de baixo digitei o nome dele e teclei Enter.

Será apresentada uma lista de opções deste utilitário. Para instalarmos nosso serviço, temos que ir a pasta em que o mesmo foi compilado, dentro da pasta Debug, que por sua vez fica dentro da pasta Bin, que por sua vez fica dentro da pasta do seu projeto do Visual Studio, que nesse exemplo é a ExemploWindowsService. Dentro desta pasta arraste o executável para a janela de comando, não esquecendo de digitar installutil antes do caminho do arquivo. Seu prompt deverá ficar assim:


Pronto, serviço instalado. Agora vá ao gerenciador de serviços e procure pelo nome de seu serviço. Quando achá-lo clique em Iniciar do lado esquerdo ou clique com o botão direito em cima do serviço e clique em Iniciar.


Agora vá à raiz da unidade C: e veja que foi criado o arquivo testeLog.txt, abra-o e veja o texto:


Podemos perceber que o log funciona corretamente. Agora volte ao gerenciador de serviços, clique com o botão direito em cima do seu serviço e clique em Parar.

Abra novamente o testeLog.txt e veja a mensagem:


Se quisermos desinstalar este serviço, é só usar a mesma linha de código que usamos para instalá-lo, só com o adicional /u após o installutil, ficando assim:


Após a execução do comando acima, deverá aparecer no final esta mensagem:


Observação importante: se você tem o serviço instalado e deseja realizar alguma modificação nele, via código, é necessária que o serviço seja parado, a janela do gerenciador de serviços seja fechada, que seja desinstalado o serviço para só assim poder instalá-lo novamente com as modificações. Outra coisa: devemos evitar usar qualquer tipo de interface com o usuário, já que o serviço é feito exclusivamente para ser rodado em “segundo plano”, totalmente oculto da visão do usuário.

Assim finalizo o artigo.

Para quem se interessar, disponibilizo o código fonte desse projeto aqui.

Quaisquer dúvidas mandem emails para wellingtonbalbo@gmail.com ou deixem nos comentários deste artigo que responderei o mais rápido possível.

Até o próximo artigo!