Debugando Windows Services no Visual Studio

Um colega de trabalho me questionou como debugar um Windows Services, geralmente isso é uma tarefa chata, precisamos instalar o serviço e ativar a interação para depois iniciar o Visual Studio em modo debug atachando o processo do serviço instalado.

Veja bem, não precisa ser complicado assim. Basta definir no próprio código o comportamento. Acredito que isso veja a ajudar bastante o nosso dia-a-dia então ai vai:

No seu arquivo Program.cs em seu estado original encontraremos o código a seguir:

namespace ServicoEduardo
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[]
			{
				new Service1()
			};
            ServiceBase.Run(ServicesToRun);
        }
    }
}

No código a seguir estamos deixando o serviço apto a ser debugado pelo Visual Studio sem a necessidade de instalação ou demais configurações:

namespace ServicoEduardo
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
#if (!DEBUG)
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[]
			{
				new Service1()
			};
            ServiceBase.Run(ServicesToRun);
#else
            // Debug code: Permite debugar um código sem se passar por um Windows Service.
            // Defina qual método deseja chamar no inicio do Debug (ex. MetodoRealizaFuncao)
            // Depois de debugar basta compilar em Release e instalar para funcionar normalmente.
            Service1 service = new Service1();
            // Chamada do seu método para Debug.
            service.MetodoRealizaFuncao();
            // Coloque sempre um breakpoint para o ponto de parada do seu código.
            System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
#endif
        }
    }
}

O que fizemos? Simples, informamos no próprio código o seu devido comportamento, assim quando estiver em modo Debug no Visual Studio ao dar um F5 seu código iniciará na chamada do método que foi definida.

Para testarmos as rotinas é muito prático, pois evitamos a necessidade de instalar e atachar o processo do serviço, que na maioria das vezes se torna o grande problema para testarmos as funcionalidades desenvolvidas.

Espero ter ajudado, em caso de dúvidas deixe um comentário.

30 pensou em “Debugando Windows Services no Visual Studio

  1. Olá, estava pesquisando no google e encontrei seu site!! Parabéns! me ajudou..kkkkkkkkkkkkkkkkk!
    Você sabe explicar… pode fazer um tutorial de algum sistema basico consumindo algum webservice? abraços

  2. Olá boa tarde!
    Sou iniciante e estou com certa dificuldade para criar um serviço que acesse dois bancos que verifique se tem alguma atualização em ambos, porem criei o serviço que esta rodando mais não estou conseguindo ligar os banco de dados com Windows Services como proceder para fazer a ligação de ambos? Alem disso ele deve atualizar linha por linha de cada tabela e cada banco tem muitas tabelas eu deveria conectar campo por campo de cada tabela como fazemos normalmente ou há outra forma?Preciso de uma ajuda…..
    Sera que poderia me auxiliar?
    Obrigado…..

  3. Achei outras soluções envolvendo criar um projeto secundário (Console Application) para instanciar o serviço e, finalmente, debugá-lo. Da forma que você sugeriu fica bem mais simples! Obrigado!

  4. Eduardo, sua informação ajudou muito!
    Agradeço a publicação!
    Estou iniciando em desenv. de serviços e a falta de fácil Debug já estava me fazendo desisitir.
    Valeu mesmo.

  5. Muito bom o conteúdo.

    Era isso que precisava.

    Estava debugando de uma forma mais trabalhosa usando o Debugger.Launch();.

    Eduardo, Obrigado pela dica

Os comentários estão fechados.