Compartilhar via


Arquitetura de programação de 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 dos serviços Windows usando Microsoft.Extensions.Hosting.BackgroundService e o modelo do Serviço de Trabalho, consulte:

Os aplicativos do Serviço Windows são baseados em uma classe que herda da System.ServiceProcess.ServiceBase classe. Você substitui os métodos dessa classe e define a funcionalidade para que eles determinem como seu serviço se comporta.

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

Além disso, uma classe nomeada ServiceController pode ser usada para manipular o próprio serviço. Essa classe não está 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

Na 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 ServiceBase classe expõe os métodos a seguir, que você pode substituir para adicionar comportamento personalizado.

Método Substituir para
OnStart Indique quais ações devem ser executadas quando o serviço começar a ser executado. Você deve escrever código neste procedimento para que seu serviço execute um trabalho útil.
OnPause Indique o que deve acontecer quando o serviço estiver em pausa.
OnStop Indique o que deve acontecer quando o serviço parar de ser executado.
OnContinue Indica o que deve acontecer quando o serviço continua o funcionamento normal depois de ser colocado em pausa.
OnShutdown Indique o que deve acontecer antes do sistema ser desligado, se o serviço estiver em execução nesse momento.
OnCustomCommand Indique o que deve acontecer quando seu serviço recebe um comando personalizado. Para obter mais informações sobre comandos personalizados, consulte MSDN online.
OnPowerEvent Indique como o serviço deve responder quando um evento de gerenciamento de energia é recebido, como uma bateria baixa ou uma operação suspensa.

Observação

Esses métodos representam estados pelos quais o serviço passa em seu tempo de vida; o serviço faz a transição de um estado para o outro. Por exemplo, o serviço nunca responderá a um comando OnContinue antes que OnStart tenha sido chamado.

Há várias outras propriedades e métodos que são de interesse. Elas incluem:

  • O Run método na ServiceBase classe. Esse é o ponto de entrada principal para o serviço. Quando você cria um serviço usando o modelo do Serviço Windows, o código é inserido no método do Main aplicativo para executar o serviço. Este 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 de tipo ServiceBase, na qual cada serviço que seu 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á optar por não usar a matriz e simplesmente declarar um novo objeto herdando ServiceBase e executá-lo. Para obter um exemplo, consulte Como Escrever Serviços Programaticamente.

  • Uma série de propriedades na ServiceBase classe. 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. A propriedade CanPauseAndContinue é 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 se comunicar e controlar o comportamento de um serviço existente.

Consulte também