Compartilhar via


Introdução aos Aplicativos de Serviço do Windows

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 serviços do Microsoft Windows, anteriormente conhecidos como serviços NT, permitem criar aplicativos executáveis de execução longa 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 funcionalidade de execução longa que não interfira 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 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 criar serviços facilmente criando um aplicativo 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 do Serviço Windows que escuta os dados do contador de desempenho, implantar o aplicativo e começar a coletar e analisar dados.

Você cria seu serviço como um projeto do Microsoft Visual Studio, definindo o código dentro dele que controla quais comandos podem ser enviados para o serviço e quais ações devem ser executadas 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 criar 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 seu 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 maneira significativa. Você não pode 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. Nesse caso, você precisa instalar e iniciar o serviço e, em seguida, anexar um depurador ao processo do serviço. Para obter mais informações, consulte Como fazer: Depurar Aplicativos de Serviços 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 seu serviço com o Gerenciador de Controle dos 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 Executar 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 dos Serviços windows , esse método será gravado automaticamente para você. Observe que carregar um serviço não é a mesma coisa que iniciar o serviço. Consulte "Tempo de vida do serviço" abaixo para obter mais informações.

  • Os aplicativos do Serviço 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 de área de trabalho. Como a estação do serviço 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 poderão fazer com que seu programa pare de responder. Da mesma forma, as mensagens de erro devem ser registradas no log de eventos do Windows em vez de geradas na interface do usuário.

    As classes de serviço do Windows compatíveis com o .NET Framework não dão suporte à 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 áreas de trabalho. Se o serviço 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 nenhum usuário conectado ou o usuário ter um conjunto inesperado de objetos da área de trabalho. Em alguns casos, pode ser mais apropriado gravar 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 eles estão instalados. Você deve planejar cuidadosamente em qual conta de usuário executar o serviço; um serviço em execução na conta do sistema tem mais permissões e privilégios do que uma conta de usuário.

Tempo de vida do serviço

Um serviço passa por vários estados internos em seu tempo de vida. Primeiro, o serviço é instalado no sistema no qual ele será executado. Esse processo executa os instaladores do 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 é carregado, ele precisa ser iniciado. Iniciar o serviço permite que ele comece a funcionar. Você pode iniciar um serviço no Gerenciador de Controle de Serviços, no Gerenciador de Servidores ou no 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ê tenha definido lá.

Um serviço em execução pode existir nesse estado indefinidamente até ser 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, StartPendingou 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 realizado. 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 ocorrer.

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 (OnStopou OnPauseOnContinue), no qual você pode definir processamento adicional a ser executado quando o serviço altera o 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. Os 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.

Ocasionalmente, você poderá ver outros tipos de serviço se 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 windows que define seu serviço.

Para obter mais informações, consulte ServiceController.

Requisitos

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

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

Consulte também