C# - Criando serviços para Windows com o TopShelf   


 Neste artigo veremos como criar serviços para Windows usando o TopShelf na linguagem C#.

Se você já precisou criar um serviço Windows na linguagem C# sabe que esta não é uma tarefa trivial.

Ainda bem que sempre tem alguém com alguma ideia para facilitar a vida do desenvolvedor C#.

E este é o caso do TopShelf, um projeto open-source para hospedagem de serviços que é um framework para C# que permite criar um Windows Service de forma bem simples, onde o serviço vai ser hospedado em processo como um aplicativo console.

Para detalhes de instalação, pré-requisitos e documentação visite o site em : http://topshelf-project.com/

Para usar TopShelf no seu projeto basta instalar o pacote via nuget : Install-Package Topshelf

Após referenciar o Topshelf no seu aplicativo console, ele vai se tornar um instalador de serviços com um conjunto abrangente de opções de linha de comando para instalar, configurar e executar seu aplicativo como um serviço.

Com o aplicativo Console criado você só precisa criar uma única classe de serviço com os métodos públicos de início e encerramento e configurar um serviço usando a API de configuração do TopShelf.

Então vamos ver como funciona na prática...

Recursos usados:

Criando um serviço Windows usando o TopShelf

Abra o VS Community 2017 e crie uma aplicação do tipo Console Application chamada ConsoleWS:

A seguir instale o pacote do TopShelf via nuget.

No menu Tools clique em Nuget Package Manager e a seguir em Manage Nuget Packages for Solution;

Selecione Browse e escolha o pacote TopShelf; marque o projeto e clique em Install;

Agora vamos criar uma classe chamada MeuServicoWS que vai conter a lógica do nosso serviço :

A seguir crie uma classe para configurar a lógica do seu serviço usando o projeto TopShelf:  ConfigureService.cs

using Topshelf;
namespace ConsoleWS
{
    public class ConfigureService
    {
        internal static void Configure()
        {
            HostFactory.Run(configure =>
            {
                configure.Service<MeuServicoWS>(service =>
                {
                    service.ConstructUsing(s => new MeuServicoWS());
                    service.WhenStarted(s => s.Start());
                    service.WhenStopped(s => s.Stop());
                });
                //Configure a Conta que o serviço do Windows usa para rodar
                configure.RunAsLocalSystem();
                configure.SetServiceName("MeuServicoWindowsComTopshelf");
                configure.SetDisplayName("MeuServicoWindowsComTopshelf");
                configure.SetDescription("Meu serviço Windows com Topshelf");
            });
        }
    }
}

Agora vamos chamar o serviço no método Main() da classe Program:

namespace ConsoleWS
{
    class Program
    {
        static void Main(string[] args)
        {
            ConfigureService.Configure();
        }
    }
}

Dê um Build Solution e verifique se não existem erros.

Agora é só alegria...

Instalando e Desinstalando a aplicação Console usando comandos TopShelf

Abra uma janela de prompt de comandos como administrador do sistema.

Entre na pasta bin\Debug do projeto Console :

Para instalar o serviço digite o comando : consoleWS.exe install

Para desinstalar o serviço digite : consolews.exe uninstall

Testando com serviço bem simples

Vamos alterar o código do nosso serviço na classe MeuServicoWS para fazer alguma coisa e assim testar o serviço.

Altere o código desta classe conforme abaixo:

Agora no método Start do nosso serviço, quando o mesmo for iniciado será exibida uma mensagem e a cada 10 segundos iremos exibir um texto.

Para instalar o serviço , na janela de comandos digite :  MeuServicoWS.exe install

Agora no projeto Console pressione F5 para debugar.

Veremos o seguinte resultado:

Temos o nosso serviço iniciado, e a cada 10 segundos exibindo uma mensagem no console.

Para encerrar pressione CTRL+C.

Maravilha...

Nosso serviço windows sendo executado, tranquilo , tranquilo...

E estamos conversados...

Pegue o projeto aqui : ConsoleWS.zip

(Disse Jesus) "Na verdade, na verdade vos digo que quem ouve a minha palavra, e crê naquele que me enviou, tem a vida eterna, e não entrará em condenação, mas passou da morte para a vida."
João 5:24

Referências:


José Carlos Macoratti