Seu primeiro Windows Service

1. Criar um novo projeto de serviço do Windows

  1. Abra o Visual Studio e crie um novo projeto
  2. Selecione o modelo: Visual C# → Windows → Serviço do Windows
  3. Defina o nome do projeto e o caminho de salvamento e clique em OK

Observação: versões mais novas do Visual Studio não trazem esse modelo nativo. Ele só é suportado pelo .NET Framework. Para .NET Core/.NET 5+, recomenda‑se usar Worker Service.

2. Explicação da estrutura do projeto

Arquivos principais gerados automaticamente:

  1. Program.cs: ponto de entrada do aplicativo
  2. Service1.cs: classe com a lógica principal do serviço
1. Código de entrada Program.cs
static class Program
{
    static void Main()
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[]
        {
            new Service1()
        };
        ServiceBase.Run(ServicesToRun);
    }
}Code language: JavaScript (javascript)

Função: inicia o host de serviço e carrega uma ou mais instâncias de serviço.

2. Classe principal do serviço Service1.cs
public partial class Service1 : ServiceBase
{
    public Service1()
    {
        InitializeComponent();
    }

    // Executado quando o serviço é iniciado
    protected override void OnStart(string[] args)
    {

    }

    // Executado quando o serviço é parado
    protected override void OnStop()
    {

    }
}
  • OnStart: acionado na inicialização do serviço, coloque sua lógica de negócio aqui
  • OnStop: acionado ao parar o serviço, usado para liberar recursos

3. Adicionar instalador

Essa etapa é obrigatória! Sem ela não é possível registrar o serviço no sistema.

Passos de execução
  1. Na exibição de design do Service1, clique com o botão direito → Adicionar Instalador
  2. O Visual Studio gera automaticamente o arquivo ProjectInstaller.cs com dois componentes centrais:
    • serviceInstaller1
    • serviceProcessInstaller1

Configuração das propriedades dos componentes

  1. serviceInstaller1 (configuração das informações do serviço)
    • ServiceName: nome interno do serviço (identificação no código)
    • DisplayName: nome exibido no gerenciador de serviços
    • Description: descrição do serviço
    • StartType: tipo de inicialização Manual(Manual)/Automatic(Automático)
  2. serviceProcessInstaller1 (configuração da conta de execução)
    • Account: identidade de execução
    • LocalSystem: conta do sistema local (maior nível de permissão, recomendado para testes)
    • User: conta do Windows personalizada (padrão, é necessário informar usuário e senha)

4. Escrever lógica de negócio de teste

Toda a lógica de negócio fica dentro da classe Service1. Você pode inserir seu código ali. Como serviços do Windows são difíceis de depurar, usamos temporariamente saída de log para validação. O serviço precisa ser instalado e desinstalado.

Modifique o arquivo Service1.cs

using System.IO;

protected override void OnStart(string[] args)
{
    // Grava log na inicialização
    File.AppendAllText("log.txt", "Horário de início: " + DateTime.Now + Environment.NewLine);
}

protected override void OnStop()
{
    // Grava log na parada
    File.AppendAllText("log.txt", "Horário de parada: " + DateTime.Now + Environment.NewLine);
}Code language: JavaScript (javascript)

5. Compilar, instalar e iniciar o serviço

  1. Compile o projeto para obter o arquivo WindowsServiceDemo.exe
  2. Registre o serviço com InstallUtil.exe (Prompt de comando em modo administrador)
# Instalar serviço
InstallUtil.exe WindowsServiceDemo.exe

# Desinstalar serviço
InstallUtil.exe /u WindowsServiceDemo.exeCode language: PHP (php)
  1. Abra o gerenciador de serviços com services.msc, localize o serviço, inicie‑o ou pare‑o e verifique o arquivo de log.

Serviços não podem ser executados ou depurados como programas comuns. É necessário usar ferramentas específicas para realizar a instalação.

Avisos importantes

  1. Não há depuração direta com F5: Serviços do Windows não suportam depuração direta. Solução recomendada:
    implemente um modo duplo; executa como aplicativo de console pela linha de comando e como serviço após instalação.
  2. Problema com caminhos: Caminhos relativos não funcionam, dê preferência a caminhos absolutos.
  3. Questões de permissão: A conta de execução define o acesso a disco, rede e pastas compartilhadas.
  4. Tempo limite de inicialização: Um bloqueio longo dentro de OnStart fará com que o sistema considere a inicialização como falha. Tarefas demoradas devem rodar em uma nova thread.

Seu primeiro Windows Service

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *