Introdução aos aplicativos de serviço do Windows

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 serviços do Microsoft Windows, anteriormente conhecidos como serviços NT, permitem que você crie aplicativos executáveis de longa execução que são executados em suas próprias sessões do Windows. Esses serviços podem ser iniciados automaticamente quando o computador é inicializado, podem ser pausados e reiniciados e não mostram nenhuma interface do usuário. Esses recursos tornam os serviços ideais para uso em um servidor ou sempre que você precisar de funcionalidades de longa execução que não interfiram com outros usuários que estão trabalhando no mesmo computador. Você também pode executar serviços no contexto de segurança de uma conta de usuário específica que é diferente do usuário conectado ou da conta de computador padrão. Para obter mais informações sobre serviços e sessões do Windows, consulte a documentação do SDK do Windows.

Você pode facilmente criar serviços criando um aplicativo que é instalado como um serviço. Por exemplo, suponha que você queira monitorar os dados do contador de desempenho e reagir aos valores de limite. Você pode escrever um aplicativo de Serviço do Windows que ouça os dados do contador de desempenho, implante o aplicativo e comece a coletar e analisar dados.

Você cria seu serviço como um projeto do Microsoft Visual Studio, definindo código dentro dele que controla quais comandos podem ser enviados para o serviço e quais ações devem ser tomadas quando esses comandos são recebidos. Os comandos que podem ser enviados para um serviço incluem iniciar, pausar, retomar e parar o serviço; Você também pode executar comandos personalizados.

Depois de criar e compilar o aplicativo, você pode instalá-lo executando o utilitário de linha de comando InstallUtil.exe e passando o caminho para o arquivo executável do serviço. Em seguida, você pode usar o Gerenciador de Controle de Serviços para iniciar, parar, pausar, retomar e configurar o serviço. Você também pode realizar muitas dessas mesmas tarefas no nó Serviços no Gerenciador de Servidores ou usando a ServiceController classe.

Aplicativos de serviço versus outros aplicativos do Visual Studio

Os aplicativos de serviço funcionam de forma diferente de muitos outros tipos de projeto de várias maneiras:

  • O arquivo executável compilado que um projeto de aplicativo de serviço cria deve ser instalado no servidor antes que o projeto possa funcionar de forma significativa. Não é possível depurar ou executar um aplicativo de serviço pressionando F5 ou F11; Você não pode executar imediatamente um serviço ou entrar em seu código. Em vez disso, você deve instalar e iniciar o serviço e, em seguida, anexar um depurador ao processo do serviço. Para obter mais informações, consulte Como depurar aplicativos de serviço do Windows.

  • Ao contrário de alguns tipos de projetos, você deve criar componentes de instalação para aplicativos de serviço. Os componentes de instalação instalam e registram o serviço no servidor e criam uma entrada para o serviço com o Gerenciador de Controle de Serviços do Windows. Para obter mais informações, consulte Como adicionar instaladores ao seu aplicativo de serviço.

  • O Main método para seu aplicativo de serviço deve emitir o comando Run para os serviços que seu projeto contém. O Run método carrega os serviços no Gerenciador de Controle de Serviços no servidor apropriado. Se você usar o modelo de projeto de Serviços do Windows, esse método será escrito para você automaticamente. Observe que carregar um serviço não é a mesma coisa que iniciar o serviço. Consulte "Vida útil do serviço" abaixo para obter mais informações.

  • Os aplicativos de serviço do Windows são executados em uma estação de janela diferente da estação interativa do usuário conectado. Uma estação de janela é um objeto seguro que contém uma área de transferência, um conjunto de átomos globais e um grupo de objetos da área de trabalho. Como a estação do serviço do Windows não é uma estação interativa, as caixas de diálogo geradas de dentro de um aplicativo de serviço do Windows não serão vistas e podem fazer com que o programa pare de responder. Da mesma forma, as mensagens de erro devem ser registradas no log de eventos do Windows em vez de serem geradas na interface do usuário.

    As classes de serviço do Windows suportadas pelo .NET Framework não suportam a interação com estações interativas, ou seja, o usuário conectado. O .NET Framework também não inclui classes que representam estações e desktops. Se o serviço do Windows precisar interagir com outras estações, você precisará acessar a API do Windows não gerenciada. Para obter mais informações, consulte a documentação do SDK do Windows.

    A interação do serviço Windows com o usuário ou outras estações deve ser cuidadosamente projetada para incluir cenários como não haver usuário conectado ou o usuário ter um conjunto inesperado de objetos da área de trabalho. Em alguns casos, pode ser mais apropriado escrever um aplicativo do Windows que é executado sob o controle do usuário.

  • Os aplicativos de serviço do Windows são executados em seu próprio contexto de segurança e são iniciados antes que o usuário faça logon no computador Windows no qual estão instalados. Você deve planejar cuidadosamente em qual conta de usuário executar o serviço; Um serviço executado sob a conta do sistema tem mais permissões e privilégios do que uma conta de usuário.

Vida útil do serviço

Um serviço passa por vários estados internos durante a sua vida. Primeiro, o serviço é instalado no sistema no qual será executado. Esse processo executa os instaladores para o projeto de serviço e carrega o serviço no Gerenciador de Controle de Serviços para esse computador. O Gerenciador de Controle de Serviços é o utilitário central fornecido pelo Windows para administrar serviços.

Depois que o serviço for carregado, ele deve ser iniciado. Iniciar o serviço permite que ele comece a funcionar. Você pode iniciar um serviço a partir do Gerenciador de Controle de Serviços, do Gerenciador de Servidores ou do código chamando o Start método. O Start método passa o processamento para o método do OnStart aplicativo e processa qualquer código que você definiu lá.

Um serviço em execução pode existir nesse estado indefinidamente até que seja interrompido ou pausado ou até que o computador seja desligado. Um serviço pode existir em um dos três estados básicos: Running, Pausedou Stopped. O serviço também pode relatar o estado de um comando pendente: ContinuePending, PausePending, StartPending, ou StopPending. Esses status indicam que um comando foi emitido, como um comando para pausar um serviço em execução, mas ainda não foi executado. Você pode consultar o Status para determinar em que estado um serviço está ou usar o WaitForStatus para executar uma ação quando qualquer um desses estados ocorre.

Você pode pausar, parar ou retomar um serviço do Gerenciador de Controle de Serviços, do Gerenciador de Servidores ou chamando métodos no código. Cada uma dessas ações pode chamar um procedimento associado no serviço (OnStop, OnPause, ou OnContinue), no qual você pode definir processamento adicional a ser executado quando o serviço muda de estado.

Tipos de Serviços

Há dois tipos de serviços que você pode criar no Visual Studio usando o .NET Framework. Os serviços que são o único serviço em um processo recebem o tipo Win32OwnProcess. Serviços que compartilham um processo com outro serviço recebem o tipo Win32ShareProcess. Você pode recuperar o tipo de serviço consultando a ServiceType propriedade.

Você pode ocasionalmente ver outros tipos de serviço se você consultar serviços existentes que não foram criados no Visual Studio. Para obter mais informações sobre eles, consulte o ServiceType.

Serviços e o componente ServiceController

O ServiceController componente é usado para se conectar a um serviço instalado e manipular seu estado, usando um ServiceController componente, você pode iniciar e parar um serviço, pausar e continuar seu funcionamento e enviar comandos personalizados para um serviço. No entanto, você não precisa usar um ServiceController componente ao criar um aplicativo de serviço. Na verdade, na maioria dos casos, seu ServiceController componente deve existir em um aplicativo separado do aplicativo de serviço do Windows que define seu serviço.

Para obter mais informações, veja ServiceController.

Requisitos

  • Os serviços devem ser criados em um projeto de aplicativo de serviço do Windows ou outro projeto habilitado para .NET Framework que cria um arquivo de .exe quando criado e herda da ServiceBase classe.

  • Projetos que contêm serviços do Windows devem ter componentes de instalação para o projeto e seus serviços. Isso pode ser facilmente realizado a partir da janela Propriedades . Para obter mais informações, consulte Como adicionar instaladores ao seu aplicativo de serviço.

Consulte também