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