Desenvolvimento - C#

Desinstalando e depurando Windows Services no VS 2005

Na primeira parte desta série de artigos intitulada Desenvolvendo Windows Services no VS 2005, vimos como criar um windows service simples e aprendemos a instalá-lo. Neste segundo artigo, vamos aprender a desinstalar o windows service e a depurar o seu código.

por Cláudio Ralha



Na primeira parte desta série de artigos intitulada Desenvolvendo Windows Services no VS 2005, vimos como criar um windows service simples e aprendemos a instalá-lo. Neste segundo artigo, vamos aprender a desinstalar o windows service e a depurar o seu código.

A depuração exige alguns cuidados especiais, mas não tem nada de outro mundo. Na prática, ela apenas faz valer a máxima de que “o Diabo está nos detalhes”. Algo com o qual nós já convivemos no nosso dia a dia de desenvolvedor. J Por isso, fica aqui o convite: perca o medo e tente depurar um windows service! Ao final, tenho certeza de que você dirá algo como “Pô, mas era só isso que eu tinha que fazer?”.

Desinstalando um Windows Service

Desinstalar um windows service é um processo semelhante ao que usamos para instalá-lo. Para este fim, nós utilizamos a mesma ferramenta InstallUtil só que com o parâmetro /u. A janela a seguir, apresenta a desinstalação do serviço que criamos no primeiro artigo desta série.

Desinstalando o windows service

Experimente conferir no gerenciador de serviços do Windows, se algo mudou. Você irá perceber que a entrada referente ao serviço foi excluída, o mesmo ocorrendo no registro do Windows.

Instalando a versão debugável do windows service

Após executar o passo anterior, devemos reinstalar o windows service para podermos testar a etapa de depuração do mesmo. Há um grande detalhe neste ponto que não pode passar desapercebido, caso contrário você não conseguirá obter sucesso no debug da aplicação. Olhe atentamente para a linha de comando que usamos para disparar a desinstalação do windows service. Note no path, que havíamos instalado anteriormente a versão de release do serviço (aquela que não pode ser depurada). Para conseguirmos depurar, precisamos instalar o executável que está na pasta debug!!! A próxima imagem ilustra a instalação correta.

Instalando a versão debugável

Depurando um Windows Service no Visual Studio 2005

Agora que você já está com a versão correta do windows service instalada, inicie a execução do nosso serviço de teste no gerenciador de serviços. Em seguida, abra o Visual Studio 2005 e carregue a solution MeuPrimeiroWindowsService.

O roteiro a seguir explica passo a passo como depurar um windows service no Visual Studio 2005:

  1. No menu Tools, clique em Attach to Process.
  2. A caixa de diálogos Attach to Process será exibida. Marque a opção Show Processes from All Users.

Attachando um processo

  1. Na listview Available Processes, selecione a linha que representa o nosso windows service.
  2. Clique no botão Attach.
  3. Marque os breakpoints desejados no código do windows service.

Marcando os breakpoints

  1. Abra o gerenciador de serviços e execute cada um dos passos para os quais codificamos eventos (Pausar, Continuar, Parar e Iniciar). A cada ação, você verá que a janela do Visual Studio será chamada e a execução irá parar na linha em que você marcou o breakpoint.

Execução parada em um breakpoint

  1. Tecle F5 para continuar ou F10 para avançar linha a linha.
  2. Ao final, clique no botão Stop Debugging para encerrar a depuração. O serviço será automaticamente desconectado.

Viu como não tem nada de sobrenatural no processo?

Há, no entanto, algumas limitações em relação à depuração de windows services. Não podemos depurar nem o código do evento OnStart e nem o do método Main da maneira que mostramos anteriormente, pelo simples fatos de que só podemos depurar um windows service que já esteja em execução. Consequentemente , o código desses dois métodos já foi executado antes de ligarmos o processo ao debugger. Existem maneiras de tentar burlar esta limitação descritas na Internet, como você poderá verificar no artigo disponível no link a seguir:

http://www.ondotnet.com/pub/a/dotnet/2003/09/02/debuggingsvcs.html

Depurando um Windows Service no Visual Studio 2003

O roteiro que apresentamos na seção anterior só é válido para o Visual Studio 2005, já que os nomes de menus e as opções na caixa de diálogos mudaram em relação aos usados nas versões anteriores da IDE. Para você que está desenvolvendo utilizando ainda o Visual Studio 2003, a seqüência de passos correta é a seguinte:

  1. Selecione a opção Processes no menu Debug.
  2. A caixa de diálogos Process será exibida.
  3. Marque a caixa de verificação Show system processes para incluir os serviços que estão rodando.
  4. Selecione a linha que contém o processo que deseja depurar.
  5. Clique no botão Attach.
  6. Clique no botão OK para fechar a caixa de diálogo.
  7. Marque os breakpoints desejados.
  8. Para parar a sessão de depuração, use a opção Stop Debugging do menu Debug.
  9. Desconecte do processo usando a opção Process do menu Debug.
  10. Selecione o serviço e clique em Detach.

Conclusão

Aqueles que conseguiram depurar o windows service devem ter percebido que debugar este tipo de aplicação não é uma tarefa tão trivial quanto a de uma windows form application, mas também devem ter se dado conta de que não é nenhum bicho-de-sete-cabeças. Após o susto inicial, você acabará se acostumando e passará a executar os passos envolvidos neste tipo de depuração de forma mecânica.

No próximo artigo da série, veremos como fazer algumas coisas interessantes e úteis com os windows services. Até a próxima!

Cláudio Ralha

Cláudio Ralha

Cláudio Ralha - http://linhadecodigo.com.br/cs2/blogs/ClaudioRalha/default.aspx
Autor dos livros Dominando o Second Life e Segredos do Visual Studio.NET, profissional certificado Microsoft (MCP,MCAD,MCTS e MCPD) e palestrante Microsoft Brasil e Culminis. Já atuou como colunista do Informática etc do Jornal O GLOBO, editor da Revista Infomania e colaborador de várias revistas e sites. No mercado corporativo já desenvolveu para grandes clientes como Petrobras, Shell, Esso, Rede Globo, Furnas, Brascan, ONS, Unibanco e Bolsa de Valores pelas consultorias Accenture, Stefanini, Arcon, ATT/PS, Informaker, Relacional, Value Team e Softtek.