domingo, 12 de julho de 2015

Criando um serviço no Microsoft Visual Studio 2013




Olá amigos do The Club, neste artigo vou procurar dar algumas dicas de como devemos criar um serviço do Windows junto com a classe “EventLog”(responsável por registrar tarefas). Usaremos como ferramenta base a última versão do Microsoft Visual Studio, a 2013. Os serviços do Sistema Operacional Windows nada mais é que uma aplicação que se inicializa quando o mesmo é carregado rodando em “BackGround”. Aplicações deste tipo é muito útil quando desejamos monitorar de uma forma constante alguma tarefa, ou seja, efetuar qualquer tarefa em segundo plano enquanto o sistema está ocupado efetuando seu trabalho. Outra característica primordial deste tipo de aplicação é que não devemos possuir componentes visuais, pois como foi dito anteriormente sua característica principal é rodar em segundo plano. Um bom exemplo de utilização de serviços é a atualização constante de Banco de Dados, Monitoração de diretórios ou arquivos, criação de arquivos de logs entre outras. Quando exibimos os serviços instalados por padrão no Windows podemos obter algumas informações como Nome, Descrição, Status e Tipo de Inicialização.

Criando o Projeto de Exemplo

Para isto abra o MVS2013 e navegue até a opção “File/New Project...” e  em “Templates/Visual C#/Windows” escolheremos “Windows Service”. Definimos o Nome para “WindowsServiceTheClub”. Ver Imagem 01.
 

 
Figura 01: Criando um Novo Projeto.


Para registrar os eventos salvaremos nos denominados Logs de Serviços no Windows. Temos um componente que realiza exatamente esta tarefa, clicando na “ToolBox” e na região “Components” podemos localizar o “EventLog”. Ver Imagem 02.
Clique e arraste para a nosso Serviço. Lembrando que todos os componentes para se trabalhar com serviços não deverão ser Visuais.
Figura 02: Componente EventLog.

Teremos no “Service1.cs” o componente como ilustra abaixo (Ver Imagem 03)


Figura 03: Componente Utilizado.

Codificando o Exemplo

Clique com o botão direito escolhendo “View Code”. Abaixo detalharei mais a codificação.
Por padrão temos algumas bibliotecas utilizadas.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;



namespace WindowsServiceTheClub
{

    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
            if (!System.Diagnostics.EventLog.SourceExists("MySource"))
            {
                System.Diagnostics.EventLog.CreateEventSource(
                    "MySource", "MyNewLog");
            }

            eventLog1.Source = "MySource";
            eventLog1.Log = "MyNewLog";

        }

No Construtor da classe “Service” encontramos o método “InitializeComponent”, é este método que executa o início do contrutor da classe abordada em questão. Após esta declaração faremos um “If” para identificar se o arquivo de Log foi criado ou não, utilizando os eventos “Source” e “Log”. O evento “Log” será a identificação do Log, ou seja, “MyNewLog”.



           protected override void OnStart(string[] args)
        {
            eventLog1.WriteEntry("Iniciar...");
        }


        protected override void OnStop()
        {
            eventLog1.WriteEntry("Parar...");
        }


        protected override void OnContinue()
        {
            eventLog1.WriteEntry("Continuar...");
        } 

Temos três eventos do tipo“Override” (sobrescritos) para classes deste tipo, sendo: “Onstart” (Iniciar o serviço), “OnStop” (Parar o serviço) e “OnContinue” (Continuar o serviço). Como se trata de um exemplo para aprendizado iremos apenas identificar o tipo de tarefa utilizando o Método “eventLog1.WriteEntry”.

}

Criando os Instaladores para o Serviço

Podemos criar estes instaladores para o Windows Services com o auxílio do Visual Studio. Para isto clique com o botão direito sobre o arquivo “Service.cs” e selecione “View Designer”. No plano de fundo clique para selecionar o próprio serviço e com o botão direito escolha “Add Installer”.Ver Figura 04.
 
Figura 04: Adicionando o Instalador.


Abaixo o código que foi gerado automaticamente pelo Visual Studio.

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;
using System.Threading.Tasks;

namespace WindowsServiceTheClub
{
    [RunInstaller(true)]
    public partial class ProjectInstaller : System.Configuration.Install.Installer
    {
        public ProjectInstaller()
        {
            InitializeComponent();
        }
    }
}
Por padrão, uma classe de componente que contém dois instaladores é adicionada ao projeto. O componente é denominado “ProjectInstaller” e os instaladores que ele contém são: o instalador para o seu serviço e o instalador para o processo associado do serviço. No modo de exibição Design de “ProjectInstaller”, clique em “ServiceInstaller1” para um projeto do Visual C#.

Na janela Propriedades, defina a propriedade ServiceName como ServicoTheCLub (Este é o nome que irá apresentar nos serviços instalados). Em StartType deixe como Automatic (Desta forma o serviço irá iniciar automaticamente quando o computadorfor reiniciado)

Ver Imagem 05.

Figura 05: ServiceInstaller.

Já no designer, do “ServiceProcessInstaller1” defina a propriedade Account como LocalSystem. Isso fará com que o serviço seja instalado e executado em uma conta de serviço local. Ver Imagem 06.

Observação Importante:

A conta LocalSystem tem amplas permissões, incluindo a capacidade de gravar no log de eventos. Use essa conta com cuidado, pois ela pode aumentar o risco de ataques de software mal-intencionado. Para outras tarefas, pense em usar a conta LocalService, que atua como um usuário não privilegiado no computador local e apresenta credenciais anônimas a qualquer servidor remoto. Esse exemplo falhará se você tentar usar a conta LocalService, uma vez que ela não tem permissões para gravar no log de eventos. (Fonte: http://msdn.microsoft.com/pt-br/library/zt39148a(v=vs.110).aspx)

 
 Figura 06:ServiceProcessInstaller.

Após realizar estas etapas devemos compilar o projeto.

Instalação e desinstalação


A instalação dos serviços deverão ser realizadas via prompt de comando. Para isto clique no menu iniciar digitando “CMD” para abrir a janela responsável por esta tarefa. No meu caso o exemplo de Windows Service foi salvo na pasta

 

“C:\TheClub\Revista\2014\Revista_07_2014\VisualStudio_Serviços\WindowsServiceTheClub\WindowsServiceTheClub\bin\Debug”

 

O aplicativo “InstallUtil” será o responsável pela instalação e desinstalação do mesmo. Este aplicativo normalmente se encontra na pasta do Framework, veja abaixo:

 

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe"

 

Para Instalar:

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe" “C:\TheClub\Revista\2014\Revista_07_2014\VisualStudio_Serviços\WindowsServiceTheClub\WindowsServiceTheClub\bin\Debug”

 

Para desinstalar:

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe" /u “C:\TheClub\Revista\2014\Revista_07_2014\VisualStudio_Serviços\WindowsServiceTheClub\WindowsServiceTheClub\bin\Debug”

 

Receberemos uma mensagem identica à Imagem 07.

 

Figura 07: Instalação Concluída com sucesso.

 

Para iniciar o serviço abra o painel de controle e em ferramentas administrativas localize ‘Serviços”. Ver Imagem 08.

 


 

Figura 08: ServicoTheClub.

 

Por padrão o serviço é instalado com o tipo de inicialização automático e parado. Para isto Selecione seu serviço na lista, clique nele com o botão direito do mouse e clique em Iniciar.

 

Podemos verificar o Log de eventos clicando com o botão direito sobre no ícone “Meu Computador” escolhendo “Gerenciar”. Teremos uma janela igual ilustra a Imagem 09.

 

Figura 09: Gerenciamento do Computador.

Navegue até “Ferramentas do Sistema/Visualizador de Eventos/Logs de Aplicativos e Serviços” ali encontramos o Log gerado pelo nosso serviço, no caso, se tudo tiver ocorrido de acordo teremos na aba Geral algumas informações, sendo: “Iniciar...”, “Parar...”, “Continuar...” entre outras informações irrelevantes para este exemplo.

Conclusões

Podemos aprender neste artigo todos os passos necessários para se criar um serviço do Windows utilizando o Microsoft Visual Studio 2013. Apesar do exemplo ser muito simples, pudemos explorar todas as funcionalidades com o mínimo de código possível. Fica aí a dica,
Espero que tenham gostado, um abraço e até a próxima.

 

Nenhum comentário:

Postar um comentário