Introdução a aplicativos do Serviço WindowsIntroduction to Windows Service Applications

Os serviços do Microsoft Windows, anteriormente conhecidos como serviços do NT, permitem que você crie aplicativos executáveis de longa execução que são executados em suas próprias sessões do Windows.Microsoft Windows services, formerly known as NT services, enable you to create long-running executable applications that run in their own Windows sessions. Esses serviços podem ser iniciados automaticamente quando o computador é inicializado, podem ser colocados em pausa e reiniciados e não exibem nenhuma interface do usuário.These services can be automatically started when the computer boots, can be paused and restarted, and do not show any user interface. Esses recursos fazem com que os serviços sejam ideais para serem usados em um servidor ou sempre que você precisar de uma funcionalidade de longa execução que não interfira em outros usuários que trabalham no mesmo computador.These features make services ideal for use on a server or whenever you need long-running functionality that does not interfere with other users who are working on the same computer. 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 padrão do computador.You can also run services in the security context of a specific user account that is different from the logged-on user or the default computer account. Para obter mais informações sobre serviços e sessões do Windows, confira a documentação do SDK do Windows.For more information about services and Windows sessions, see the Windows SDK documentation.

Você pode criar serviços facilmente, criando um aplicativo que é instalado como um serviço.You can easily create services by creating an application that is installed as a service. Por exemplo, considere que você queira monitorar dados do contador de desempenho e reagir a valores de limite.For example, suppose you want to monitor performance counter data and react to threshold values. Você pode escrever um aplicativo de Serviço Windows que escute os dados do contador de desempenho, implante o aplicativo e comece a coleta e a análise de dados.You could write a Windows Service application that listens to the performance counter data, deploy the application, and begin collecting and analyzing data.

Você cria o serviço como um projeto do Microsoft Visual Studio, definindo um código que controla os comandos que podem ser enviados ao serviço e quais ações devem ser tomadas quando esses comandos são recebidos.You create your service as a Microsoft Visual Studio project, defining code within it that controls what commands can be sent to the service and what actions should be taken when those commands are received. Os comandos que podem ser enviados a um serviço incluem iniciar, pausar, retomar e parar o serviço. Você também pode executar comandos personalizados.Commands that can be sent to a service include starting, pausing, resuming, and stopping the service; you can also execute custom commands.

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.After you create and build the application, you can install it by running the command-line utility InstallUtil.exe and passing the path to the service's executable file. Você pode usar o Gerenciador de Controle de Serviços para iniciar, parar, pausar, retomar e configurar o serviço.You can then use the Services Control Manager to start, stop, pause, resume, and configure your service. Você também pode realizar muitas das mesmas tarefas no nó Serviços no Gerenciador de Servidores ou usando a classe ServiceController.You can also accomplish many of these same tasks in the Services node in Server Explorer or by using the ServiceController class.

Aplicativos de serviço versus. Outros aplicativos do Visual StudioService Applications vs. Other Visual Studio Applications

Os aplicativos de serviço funcionam de forma diferente de vários outros tipos de projeto por vários motivos:Service applications function differently from many other project types in several ways:

  • O arquivo executável compilado que um projeto de aplicativo de serviço cria precisa ser instalado no servidor antes que o projeto possa funcionar de forma significativa.The compiled executable file that a service application project creates must be installed on the server before the project can function in a meaningful way. Você não pode depurar ou executar um aplicativo de serviço pressionando F5 ou F11. Você não pode executar um serviço ou intervir no código imediatamente.You cannot debug or run a service application by pressing F5 or F11; you cannot immediately run a service or step into its code. Nesse caso, você precisa instalar e iniciar o serviço e, em seguida, anexar um depurador ao processo do serviço.Instead, you must install and start your service, and then attach a debugger to the service's process. Para obter mais informações, confira Como: Depurar aplicativos do serviço Windows.For more information, see How to: Debug Windows Service Applications.

  • Ao contrário de alguns tipos de projetos, você precisa criar componentes de instalação para aplicativos de serviço.Unlike some types of projects, you must create installation components for service applications. 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.The installation components install and register the service on the server and create an entry for your service with the Windows Services Control Manager. Para obter mais informações, confira Como: Adicionar instaladores ao aplicativo de serviço.For more information, see How to: Add Installers to Your Service Application.

  • O método Main para o aplicativo de serviço precisa emitir o comando Run para os serviços que o projeto contém.The Main method for your service application must issue the Run command for the services your project contains. O método Run carrega os serviços no Gerenciador de Controle de Serviços no servidor apropriado.The Run method loads the services into the Services Control Manager on the appropriate server. Se você usar o modelo de projeto de Serviços Windows, esse método será escrito automaticamente.If you use the Windows Services project template, this method is written for you automatically. Observe carregar um serviço não é a mesma coisa que iniciar o serviço.Note that loading a service is not the same thing as starting the service. Confira "Tempo de vida do serviço" abaixo para obter mais informações.See "Service Lifetime" below for more information.

  • Os aplicativos de Serviço Windows são executados em uma estação de janela diferente da estação interativa do usuário conectado.Windows Service applications run in a different window station than the interactive station of the logged-on user. 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.A window station is a secure object that contains a Clipboard, a set of global atoms, and a group of desktop objects. Como a estação de Serviço Windows não é uma estação interativa, as caixas de diálogo geradas de um aplicativo de Serviço Windows não serão vistas e poderão fazer com que o programa pare de responder.Because the station of the Windows service is not an interactive station, dialog boxes raised from within a Windows service application will not be seen and may cause your program to stop responding. Da mesma forma, as mensagens de erro devem ser registradas no log de eventos do Windows e não geradas na interface do usuário.Similarly, error messages should be logged in the Windows event log rather than raised in the user interface.

    As classes de Serviço Windows com suporte do .NET Framework não permitem a interação com estações interativas, ou seja, com o usuário conectado.The Windows service classes supported by the .NET Framework do not support interaction with interactive stations, that is, the logged-on user. O .NET Framework também não inclui classes que representam estações e áreas de trabalho.The .NET Framework also does not include classes that represent stations and desktops. Se o Serviço Windows precisar interagir com outras estações, será necessário acessar a API do Windows não gerenciada.If your Windows service must interact with other stations, you will need to access the unmanaged Windows API. Para obter mais informações, confira a documentação do SDK do Windows.For more information, see the Windows SDK documentation.

    A interação do serviço Windows com o usuário ou com outras estações precisa ser projetada cuidadosamente para incluir cenários como, quando não houver nenhum usuário conectado ou quando o usuário tiver um conjunto inesperado de objetos de área de trabalho.The interaction of the Windows service with the user or other stations must be carefully designed to include scenarios such as there being no logged on user, or the user having an unexpected set of desktop objects. Em alguns casos, pode ser mais apropriado escrever um aplicativo do Windows que seja executado sob o controle do usuário.In some cases, it may be more appropriate to write a Windows application that runs under the control of the user.

  • Os aplicativos de serviço Windows são executados em seus próprios contextos de segurança e são iniciados antes do usuário fazer logon no computador Windows no qual estão instalados.Windows service applications run in their own security context and are started before the user logs into the Windows computer on which they are installed. Você deve planejar cuidadosamente em qual conta de usuário o serviço será executado. Um serviço executado na conta do sistema tem mais permissões e privilégios do que em uma conta de usuário.You should plan carefully what user account to run the service within; a service running under the system account has more permissions and privileges than a user account.

Tempo de vida do serviçoService Lifetime

Um serviço passa por vários estados internos durante seu tempo de vida.A service goes through several internal states in its lifetime. Primeiro, o serviço está instalado no sistema no qual será executado.First, the service is installed onto the system on which it will run. Esse processo executa os instaladores do projeto de serviço e carrega o serviço no Gerenciador de Controle de Serviços desse computador.This process executes the installers for the service project and loads the service into the Services Control Manager for that computer. O Gerenciador de Controle de Serviços é o utilitário central fornecido pelo Windows para administrar serviços.The Services Control Manager is the central utility provided by Windows to administer services.

Depois que o serviço é carregado, ele precisa ser iniciado.After the service has been loaded, it must be started. Iniciar o serviço permite que ele comece a funcionar.Starting the service allows it to begin functioning. Você pode iniciar um serviço usando o Gerenciador de Controle de Serviços, o Gerenciador de Servidores ou o código chamando o método Start.You can start a service from the Services Control Manager, from Server Explorer, or from code by calling the Start method. O método Start passa o processamento para o método OnStart do aplicativo e processa qualquer código que você tenha definido ali.The Start method passes processing to the application's OnStart method and processes any code you have defined there.

Um serviço em execução pode existir nesse estado indefinidamente até que ele seja interrompido ou colocado em pausa, ou até que o computador seja desligado.A running service can exist in this state indefinitely until it is either stopped or paused or until the computer shuts down. Um serviço pode existir em um de três estados básico: Running, Paused ou Stopped.A service can exist in one of three basic states: Running, Paused, or Stopped. O serviço também pode relatar o estado de um comando pendente: ContinuePending, PausePending, StartPending ou StopPending.The service can also report the state of a pending command: ContinuePending, PausePending, StartPending, or 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.These statuses indicate that a command has been issued, such as a command to pause a running service, but has not been carried out yet. Você pode consultar o Status para determinar em qual estado o serviço está ou usar o WaitForStatus para executar uma ação quando algum desses estados ocorrer.You can query the Status to determine what state a service is in, or use the WaitForStatus to carry out an action when any of these states occurs.

Você pode pausar, parar ou retomar um serviço usando o Gerenciador de Controle de Serviço, do Gerenciador de Servidores ou chamando os métodos no código.You can pause, stop, or resume a service from the Services Control Manager, from Server Explorer, or by calling methods in code. Cada uma dessas ações pode chamar um procedimento associado no serviço (OnStop, OnPause ou OnContinue), no qual você pode definir o processamento adicional a ser executado quando o estado do serviço for alterado.Each of these actions can call an associated procedure in the service (OnStop, OnPause, or OnContinue), in which you can define additional processing to be performed when the service changes state.

Tipos de serviçosTypes of Services

Há dois tipos de serviços que você pode criar no Visual Studio usando o .NET Framework.There are two types of services you can create in Visual Studio using the .NET Framework. Os serviços que são o único serviço em um processo recebem o tipo Win32OwnProcess.Services that are the only service in a process are assigned the type Win32OwnProcess. Os serviços que compartilham um processo com outro serviço recebem o tipo Win32ShareProcess.Services that share a process with another service are assigned the type Win32ShareProcess. Você pode recuperar o tipo do serviço consultando a propriedade ServiceType.You can retrieve the service type by querying the ServiceType property.

Ocasionalmente, você poderá ver outros tipos de serviço ao consultar os serviços existentes que não foram criados no Visual Studio.You might occasionally see other service types if you query existing services that were not created in Visual Studio. Para obter mais informações sobre eles, confira o ServiceType.For more information on these, see the ServiceType.

Serviços e o componente ServiceControllerServices and the ServiceController Component

O componente ServiceController é usado para se conectar a um serviço instalado e manipular o seu estado. Usando um componente ServiceController, você pode iniciar e parar um serviço, pausar e continuar seu funcionamento e enviar comandos personalizados a um serviço.The ServiceController component is used to connect to an installed service and manipulate its state; using a ServiceController component, you can start and stop a service, pause and continue its functioning, and send custom commands to a service. No entanto, você não precisa usar um componente ServiceController ao criar um aplicativo de serviço.However, you do not need to use a ServiceController component when you create a service application. Na verdade, na maioria dos casos o componente ServiceController deve existir em um aplicativo separado do aplicativo de serviço Windows que define seu serviço.In fact, in most cases your ServiceController component should exist in a separate application from the Windows service application that defines your service.

Para obter mais informações, consulte ServiceController.For more information, see ServiceController.

RequisitosRequirements

  • Os serviços precisam ser criados em um projeto de aplicativo de Serviço Windows ou em outro projeto habilitado pelo .NET Framework que crie um arquivo .exe ao ser compilado e seja herdado da classe ServiceBase.Services must be created in a Windows Service application project or another .NET Framework–enabled project that creates an .exe file when built and inherits from the ServiceBase class.

  • Os projetos que contêm serviços Windows precisam ter os componentes de instalação para o projeto e seus serviços.Projects containing Windows services must have installation components for the project and its services. Isso pode ser conseguido facilmente pela janela Propriedades.This can be easily accomplished from the Properties window. Para obter mais informações, confira Como: Adicionar instaladores ao aplicativo de serviço.For more information, see How to: Add Installers to Your Service Application.

Consulte tambémSee also