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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a 
Objetos com VB .NET
![]()
C# - Parando, Iniciando e Reiniciando os serviços do Windows - III
C# - Exibindo todos serviços ativos do Windows no ListView - Macoratti