1. Criar um novo projeto de serviço do Windows
- Abra o Visual Studio e crie um novo projeto
- Selecione o modelo: Visual C# → Windows → Serviço do Windows
- 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:
- Program.cs: ponto de entrada do aplicativo
- 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 aquiOnStop: 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
- Na exibição de design do
Service1, clique com o botão direito → Adicionar Instalador - O Visual Studio gera automaticamente o arquivo
ProjectInstaller.cscom dois componentes centrais:serviceInstaller1serviceProcessInstaller1

Configuração das propriedades dos componentes
- 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çosDescription: descrição do serviçoStartType: tipo de inicializaçãoManual(Manual)/Automatic(Automático)
- serviceProcessInstaller1 (configuração da conta de execução)
Account: identidade de execuçãoLocalSystem: 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
- Compile o projeto para obter o arquivo
WindowsServiceDemo.exe - 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)
- 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
- 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. - Problema com caminhos: Caminhos relativos não funcionam, dê preferência a caminhos absolutos.
- Questões de permissão: A conta de execução define o acesso a disco, rede e pastas compartilhadas.
- Tempo limite de inicialização: Um bloqueio longo dentro de
OnStartfará com que o sistema considere a inicialização como falha. Tarefas demoradas devem rodar em uma nova thread.
Seu primeiro Windows Service