Back-End

19 out, 2018

C#: Criando um serviço Windows

845 visualizações
Publicidade

Veja nesse artigo como criar um serviço que rode junto com o seu sistema operacional Windows.

Windows Service

Quem nunca precisou criar um serviço que rode 24/7 dentro de um servidor? Existem muitos cenários, como: Importação de dados em um horário X, migração de arquivos de um server para um outro de backup, etc.

Hoje eu vou mostrar como criar um serviço Windows (Windows Service) e como instalar ele em um servidor Windows Server 2016.

Para os próximos passos será necessário ter o Visual Studio instalado no seu computador. Caso você ainda não tenha, a Microsoft disponibiliza uma versão gratuita chamada Community, que pode ser baixada através deste link.

Abra o seu Visual Studio e siga os seguintes passos: File > New Project > Visual C# > Windows Classic Desktop e selecione Windows Service (.NET Framework). Clique em OK e dê um nome para o seu projeto. Caso tudo esteja ok, você verá a imagem abaixo dentro do seu Visual Studio:

Criando um serviço Windows

O próximo passo será adicionar um instalador para o nosso serviço. Para isso, clique com o botão direito do seu mouse na tela da imagem anterior e selecione Add Instaler. Você será direcionado para uma outra tela de [Design]. Clique em serviceInstaller com o botão direito do seu mouse e selecione properties.

Esse passo abrirá um aba no canto direito da sua IDE. Nela você deve informar os dados do seu serviço, como: Nome, Descrição e o nome do serviço (que aparecerá na listagem de serviços do seu servidor Windows).

Abaixo você tem uma imagem demonstrando como eu preenchi os dados do meu serviço para esse artigo:

Informações de um serviço criado com (Windows Service e C#)

O próximo passo será criar um rotina para o nosso serviço. Para o nosso exemplo, eu irei criar um método que toda vez que o serviço rode, ele também registre a data e o horário em um arquivo .txt, algo como um log.

Abra o arquivo Service.cs e atualize ele com o trecho de código abaixo:

private Timer _timer;
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            _timer = new Timer(CriarLog, null, 0, 120000);
        }


        protected override void OnStop()
        {
        }

        private void CriarLog(object state)
        {

            StreamWriter vWriter = new StreamWriter(@"C:\Logs\log.txt", true);
            vWriter.WriteLine("serviço rodando:" + DateTime.Now);
            vWriter.Flush();
            vWriter.Close();
        }

Analisando esse trecho de código, nós temos:

  • 02: um construtor que inicializará o nosso service (padrão na criação do service)
  • 07: esse método será o primeiro a ser chamado quando o serviço inicializar. Note que ele está chamando um método CriarLog de dois em dois minutos
  • 29: o método (OnStop) é chamado toda vez que o serviço parar
  • 33: nesse método que devemos criar nossas regras de negócio. Eu poderia ter criado ele em uma outra class, mas como é somente um exemplo, eu deixei na mesma

Para instalar o nosso serviço eu irei utilizar o InstallUtil do .NET Framework. Para isso, abra um cmd como Administrador no seu servidor e navegue até o caminho abaixo:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\

Como esse é somente um teste, deixarei o build como Debug, mas caso você já tenha finalizado o seu service e esteja pronto para produção, basta alterar o build de Debug para Release como está na imagem abaixo:

Windows Service Release

Build o seu projeto e em seguida navegue até a pasta bin e copie a pasta Debug. Conforme mencionado acima, nós iremos utilizar ela para instalar o nosso service.

InstallUtil.exe (caminho do seu executável).exe

Caso o seu serviço tenha sido instalado com sucesso, você receberá a mensagem: “Instalação transacionada concluída.”. Abaixo você tem uma imagem demonstrando esse passo:

InstallUtil.exe (Windows Service)

Agora abra os serviços do seu servidor e note que o seu service está la. Para verificar os seus detalhes, dê dois cliques nele. Esse passo abrirá uma janela com as suas propriedades:

Propriedades serviço Windows

Note que ele está com o nome e a descrição que nós configuramos no Visual Studio. Clique em iniciar e vá até o diretório que você escolheu para criação dos seus arquivos de Log. Note que o nosso arquivo está lá.

Windows Service (Log)

Abra o arquivo e note que ele passa pelo método CriarLog e registra no arquivo log.txt de dois em dois minutos. Abaixo você tem uma imagem demonstrando esse passo:

A ideia deste artigo era demonstrar um passo a passo de como criar e publicar um projeto Windows Service. Espero que tenham gostado e até a próxima, pessoal!