Compartilhar via


Arquitetura de programação do aplicativo de serviço

Observação

Este artigo não se aplica aos serviços hospedados no .NET. Para obter o conteúdo mais recente sobre os Serviços Windows usando Microsoft.Extensions.Hosting.BackgroundService e o modelo de Serviço de Trabalho, confira:

Os aplicativos de Serviço Windows baseiam-se em uma classe que é herdada da classe System.ServiceProcess.ServiceBase. Você substitui os métodos dessa classe e define funcionalidades para eles para determinar o comportamento do seu serviço.

As classes principais envolvidas na criação do serviço são:

Além disso, uma classe chamada ServiceController pode ser usada para manipular o serviço sozinha. Essa classe não é envolvida na criação de um serviço, mas pode ser usada para iniciar e parar o serviço, passar comandos para ele e retornar uma série de enumerações.

Definindo o comportamento do serviço

Em sua classe de serviço, você substitui as funções de classe base que determinam o que acontece quando o estado do serviço é alterado no Gerenciador de Controle de Serviços. A classe ServiceBase expõe os métodos a seguir, que você pode substituir para adicionar o comportamento personalizado.

Método Substituir para
OnStart Indica quais ações devem ser tomadas quando o serviço é iniciado. Você precisa escrever o código neste procedimento para que o serviço realize um trabalho útil.
OnPause Indica o que deve acontecer quando o serviço está em pausa.
OnStop Indica o que deve acontecer quando a execução do serviço é interrompida.
OnContinue Indica o que deve acontecer quando o serviço continua o funcionamento normal depois de ser colocado em pausa.
OnShutdown Indica o que deverá acontecer antes do sistema ser desligado, se o serviço estiver em execução no momento.
OnCustomCommand Indica o que deve acontecer quando o serviço recebe um comando personalizado. Para obter mais informações sobre comandos personalizados, consulte o MSDN online.
OnPowerEvent Indica como o serviço deve responder quando um evento de gerenciamento de energia é recebido, como bateria fraca ou operação de suspensão.

Observação

Esses métodos representam os estados pelos quais o serviço passa em seu tempo de vida. O serviço faz a transição de um estado para o próximo. Por exemplo, você nunca fará com que o serviço responda a um comando OnContinue antes que OnStart seja chamado.

Há várias outras propriedades e métodos interessantes. Estão incluídos:

  • O método Run na classe ServiceBase. Este é o ponto de entrada principal para o serviço. Quando você cria um serviço usando o modelo de Serviço Windows, o código é inserido no método Main do aplicativo para executar o serviço. Esse código tem esta aparência:

    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[]
        { new Service1() };
    Run(ServicesToRun);
    
    Dim ServicesToRun() As System.ServiceProcess.ServiceBase
    ServicesToRun =
        New System.ServiceProcess.ServiceBase() {New Service1()}
    System.ServiceProcess.ServiceBase.Run(ServicesToRun)
    

    Observação

    Esses exemplos usam uma matriz do tipo ServiceBase, na qual cada serviço que o aplicativo contém pode ser adicionado e, em seguida, todos os serviços podem ser executados juntos. No entanto, se você estiver criando apenas um único serviço, poderá decidir não usar a matriz e simplesmente declarar um novo objeto herdado de ServiceBase e, em seguida, executá-lo. Para obter um exemplo, confira Como escrever serviços de forma programática.

  • Uma série de propriedades na classe ServiceBase. Elas determinam quais métodos podem ser chamados no serviço. Por exemplo, quando a propriedade CanStop está definida como true, o método OnStop no serviço pode ser chamado. Quando a propriedade CanPauseAndContinue está definida como true, os métodos OnPause e OnContinue podem ser chamados. Ao definir uma dessas propriedades para true, você deverá substituir e definir o processamento dos métodos associados.

    Observação

    O serviço precisará substituir pelo menos OnStart e OnStop para ser útil.

Você também pode usar um componente chamado ServiceController para comunicar-se com um serviço existente e controlar seu comportamento.

Confira também