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.
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