Você está na página 1de 10

VB 2005 - Criando um Servio do Windows (Windows Service)

Um servio do Windows uma aplicao que inicia quando o Windows carregado e roda em segundo plano enquanto o Windows estiver em execuo. Para quem conhece o Unix este conceito similar a um daemon(um programa de computador que roda em segundo plano sendo iniciado como um processo) deste sistema operacional. Uma aplicao do tipo servio do Windows til quando voc deseja monitorar de forma constante alguns arquivos, o teclado, criar um arquivo de log, ou efetuar qualquer tarefa em segundo plano enquanto o sistema esta ocupando efetuando o seu trabalho. Voc pode acessar o gerenciador de servios do Windows XP clicando no menu iniciar, painel de controle, desempenho e manuteno, ferramentas administrativas e servios, ou simplesmente clicando em iniciar, executar e digitando services.msc como mostrado na figura abaixo.

A janela de servios do Windows exibe a relao dos servios instalados com nome, descrio , Status, Tipo de inicializao, etc.

http://www.macoratti.net/vbn5_csw.htm

Nota: Os Windows services no esto disponveis no Windows 95, 98 ou ME, voc precisas ter o Windows NT, Windows 2000 ou Windows XP para rodar servios. Este artigo vai mostrar como voc pode criar um servio do Windows usando o Visual Studio 2005. Para ajud-lo a iniciar o seu trabalho com os servios do Windows o VS 2005 fornece um projeto do tipo Windows Service o qual possui um modelo de cdigo que voc pode usar para criar rapidamente um servio do Windows. (O Visual Basic 2005 Express Edition no possui este tipo de projeto) Neste artigo irei criar um servio bem simples que ir apenas gravar os eventos de vrios servios em um arquivo chamado demoWSEventos.log no diretrio raiz do sistema. Neste arquivo iremos registrar uma mensagem indicando o incio e o fim do servio : Servio iniciado em 11/12/2005 08:41:20 PM 2006 10:45:25 PM e Servio encerrado em 11/12/

Criando um Windows Service no Visual Studio 2005


- Abra o VS 2005 e selecione File -> New Project. O VS ir exibir a janela New Project; - Na janela New Project selecione o Template Windows Service e informe o nome do projeto como sendo demoWS;

http://www.macoratti.net/vbn5_csw.htm

O VS ir apresentar uma janela no modo Design conforme abaixo para o servio que iremos criar;

Clique no link - click here to switch to code view - para exibir o cdigo fonte do servio:
http://www.macoratti.net/vbn5_csw.htm

Neste momento devemos refletir sobre o que desejamos que o nosso servio faa: ele dever gravar em um arquivo no diretrio raiz os eventos dos servios. Para poder efetuar a gravao em arquivo teremos que usar o namespace System.IO no nosso projeto. Declare ento o seguinte comando: Imports System.IO Vamos declarar tambm a varivel arquivoWS como sendo do tipo StreamWriter : Private arquivoWS As StreamWriter Deveremos colocar o cdigo que inicia o nosso servio no evento OnStart, desta forma inclua o seguinte cdigo neste evento: Protected Overrides Sub OnStart(ByVal args() As String) ' Add code here to start your service. This method should set things ' in motion so your service can do its work. Try arquivoWS = New StreamWriter("c:\demoWSEventos.log", True) arquivoWS.WriteLine("Servio iniciado em " & DateTime.Now) arquivoWS.Flush() Catch ex As Exception 'no vamos tratar exceo End Try End Sub Como voc pode observar a instruo abre o arquivo e ento usando a classe o mtodo Writeline da classe StreamWriter escreve uma mensagem com a hora atual no arquivo. No vamos fechar o arquivo para torn-lo acessvel a outros eventos.
http://www.macoratti.net/vbn5_csw.htm

Quando o servio for encerrado teremos que gravar no arquivo a mensagem de encerramento e aproveitar para fechar o arquivo. O evento apropriado para colocar o cdigo que faz este servio o mtodo OnStop(). Inclua neste evento o seguinte cdigo: Protected Overrides Sub OnStop() ' Add code here to perform any tear-down necessary to stop your service. Try arquivoWS.WriteLine("Servio encerrado em " & DateTime.Now) arquivoWS.Close() Catch ex As Exception 'no vamos tratar exceo End Try End Sub Agora basta compilar a aplicao usando a opo Build. Nossa aplicao esta pronta, mas existem algumas coisas que precisamos fazer antes de continuar. O arquivo executvel criado no uma aplicao Windows, e no basta apenas clicar sobre ele para rodar o programa; ele precisa ser instalado como um servio. Esta ser a nossa prxima etapa e iremos usar as facilidades que o VS 2005 nos oferece para poder incluir um instalador para o nosso programa e ento usar este utilitrio para instalar o servio. Antes de voc poder instalar um servio, voc precisa incluir um "cdigo instalador" especial no seu projeto. O instalador fornece a informao que o Windows necessita para instalar o servio com sucesso. Para incluir o cdigo do instalador no nosso projeto demoWS vamos efetuar as seguintes etapas: Abra o projeto e selecione o modo Design; a seguir clique com o boto direito do mouse na janela View. O Visual Studio ir apresentar um menu suspenso como mostrado na figura abaixo:

Selecione a opo Add Installer. O Visual Studio ir incluir dois componentes no seu projeto: um instalador de processo de servio e um instalador de servio:

http://www.macoratti.net/vbn5_csw.htm

Quando o Windows instala um servio, ele realiza a instalao usando um dado contexto que define os privilgios que o servio pode usar. Usando o instalador de processo de servio que o VS 2005 incluiu no nosso projeto voc precisa definir uma conta no sistema (como uma conta de usurio) que define o contexto do servio. Para iniciar , voc precisa primeiro selecionar o tipo de conta (veja a tabela 1.0) dentre os tipos de contas disponveis. Os valores possveis so: Tipo de Conta Local Service NetWork Service Local System User Propsito Direciona o Windows para rodar o servio no contexto de uma conta no sistema local que pode ter privilgios extendidos; Direciona o Windows para rodar o servio no contexto de uma conta semprivilgios no sistema local. O servio apresentar as credenciais a um servidor remoto; Direciona o WIndows para rodar o servio no contexto de uma conta sem privilgios no sistema local. O servio apresentar credenciais annimas para o servidor remoto Direciona o WIndows solicita ao usurio um nome e senha vlidos a cada momento que o servio rodar.

Para o nosso exemplo vamos definir o tipo de conta como LocalSystem. Selecione ServiceInstaller1 e altere na janela de propriedades as propriedades DisplayName e ServiceName para exibir o nome demoWS para o nosso servio; Nota: O valor padro da propriedade StarType Manual e vamos deix-la assim para poder mostrar como iniciar o servio.

http://www.macoratti.net/vbn5_csw.htm

Para definir a informao para o instalador do servio, clique com o boto sobre o ServiceProcessInstaller1 e selecione a opo Properties; Na janela de propriedades do installer defina o tipo de conta como LocalSystem;

http://www.macoratti.net/vbn5_csw.htm

Para instalar o service vamos usar o programa InstallUtil, que um utilitrio .NET para instalar servios do Windows. Abra uma janela do prompt do DOS e digite a seguinte linha de comando: installUtil c:\demoWS\bin\Release\demoWS.exe onde : installUtil o utilitrio da plataforma .NET e c:\demoWS\bin\Release\demoWS.exe o nosso assembly gerado pela opo Build demoWS do menu Build. Na figura abaixo temos o resultado da execuo onde vemos que o servio foi instalado com sucesso.

http://www.macoratti.net/vbn5_csw.htm

Podemos conferir o resultado abrindo a janela de servios do Windows e localizando o servio demoWS. Para iniciar o servio clique com o boto direito do mouse sobre o nome do mesmo e selecione Iniciar:

http://www.macoratti.net/vbn5_csw.htm

Se formos olhar na raiz do diretrio C:\ iremos encontrar o arquivo demoWSEventos.txt criado pelo servio quando da sua inicializao:

O procedimento para desinstalar o servio usa o mesmo utilitrio que a instalao : o InstallUtil.exe usando o parmetro /U; o comando para desinstalar o nosso servio seria: InstallUtil /U "C:\demoWS\demoWS\bin\Release\demoWS.exe" Esteja atento para as seguintes dicas antes de desinstalar um servio: Pare o servio e feche a janela de servios antes de instalar ou desinstalar um servio; Aps qualquer alterao no servio sempre instale/desinstale o servio novamente; Evite usar interface com o usurio nos servios criados; At o prximo artigo VB.NET ... Jos Carlos Macoratti

http://www.macoratti.net/vbn5_csw.htm

Você também pode gostar