Share via


Arquitetura de programação de aplicativos de serviço

Nota

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

Os aplicativos de serviço do Windows são baseados em uma classe que herda da System.ServiceProcess.ServiceBase classe. Você substitui 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 de serviços 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 seu serviço

Na classe de serviço, você substitui 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 seguintes métodos, que você pode substituir para adicionar comportamento personalizado.

Método Substituir para
OnStart Indique quais ações devem ser tomadas 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 for pausado.
OnStop Indique o que deve acontecer quando o serviço parar de funcionar.
OnContinue Indique o que deve acontecer quando o serviço retomar o funcionamento normal após ser pausado.
OnShutdown Indique o que deve acontecer imediatamente antes do encerramento do sistema, se o serviço estiver em execução nesse momento.
OnCustomCommand Indique o que deve acontecer quando o serviço receber 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 bateria fraca ou operação suspensa.

Nota

Esses métodos representam estados pelos quais o serviço se move em seu tempo de vida; O serviço transita de um estado para o seguinte. Por exemplo, você nunca conseguirá que o serviço responda a um OnContinue comando antes OnStart de ter sido chamado.

Existem várias outras propriedades e métodos que são de interesse. Estes são, entre outros:

  • O Run método na ServiceBase classe. Este é o principal ponto de entrada para o serviço. Quando você cria um serviço usando o modelo de serviço do Windows, o código é inserido no método do Main seu 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)
    

    Nota

    Esses exemplos usam uma matriz do 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 herdado e ServiceBase executá-lo. Para obter um exemplo, consulte Como escrever serviços programaticamente.

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

    Nota

    Seu serviço deve substituir pelo menos OnStart e OnStop ser útil.

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

Consulte também