ServiceBase Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fornece uma classe base para um serviço que existirá como parte de um aplicativo de serviço. ServiceBase deve ser derivado do momento da criação de uma nova classe de serviço.
public ref class ServiceBase : System::ComponentModel::Component
public class ServiceBase : System.ComponentModel.Component
type ServiceBase = class
inherit Component
Public Class ServiceBase
Inherits Component
- Herança
- Derivado
Comentários
Deriva de ao definir sua classe de serviço em um aplicativo de ServiceBase serviço. Qualquer serviço útil substitui os OnStart métodos e OnStop . Para funcionalidade adicional, você pode substituir OnPause e OnContinue com um comportamento específico em resposta a alterações no estado do serviço.
Um serviço é um executável de execução longa que não dá suporte a uma interface do usuário e que pode não ser executado na conta de usuário conectada. O serviço pode ser executado sem que nenhum usuário esteja conectado ao computador.
Por padrão, os serviços são executados na conta sistema, que não é igual à conta de Administrador. Não é possível alterar os direitos da conta do sistema. Como alternativa, você pode usar um ServiceProcessInstaller para especificar uma conta de usuário na qual o serviço será executado.
Um executável pode conter mais de um serviço, mas deve conter um separado ServiceInstaller para cada serviço. A ServiceInstaller instância registra o serviço com o sistema. O instalador também associa cada serviço a um log de eventos que você pode usar para registrar comandos de serviço. A main()
função no executável define quais serviços devem ser executados. O diretório de trabalho atual do serviço é o diretório do sistema, não o diretório no qual o executável está localizado.
Quando você inicia um serviço, o sistema localiza o executável e executa o OnStart método para esse serviço, contido no executável. No entanto, executar o serviço não é o mesmo que executar o executável. O executável carrega apenas o serviço. O serviço é acessado (por exemplo, iniciado e interrompido) por meio do Gerenciador de Controle de Serviço.
O executável chama o ServiceBase construtor da classe derivada na primeira vez que você chama Iniciar no serviço. O OnStart método de tratamento de comando é chamado imediatamente após a execução do construtor. O construtor não é executado novamente após a primeira vez que o serviço é carregado, portanto, é necessário separar o processamento executado pelo construtor do executado por OnStart. Todos os recursos que podem ser liberados pelo OnStop devem ser criados no OnStart. A criação de recursos no construtor impede que eles sejam criados corretamente se o serviço for iniciado novamente após OnStop o lançamento dos recursos.
O SCM (Service Control Manager) fornece uma maneira de interagir com o serviço. Você pode usar o SCM para passar comandos Iniciar, Parar, Pausar, Continuar ou personalizados no serviço. O SCM usa os valores de CanStop e CanPauseAndContinue para determinar se o serviço aceita os comandos Parar, Pausar ou Continuar. Stop, Pause e Continue são habilitados nos menus de contexto do SCM somente se a propriedade CanStop correspondente ou CanPauseAndContinue estiver true
na classe de serviço. Se habilitado, o comando é passado para o serviço e OnStop, OnPauseou OnContinue é chamado. Se CanStop, CanShutdownou CanPauseAndContinue for false
, o método de tratamento de comando correspondente (como OnStop) não será processado, mesmo que você tenha implementado o método .
Você pode usar a ServiceController classe para fazer programaticamente o que o SCM faz usando uma interface do usuário. Você pode automatizar as tarefas disponíveis no console. Se CanStop, CanShutdownou CanPauseAndContinue for true
, mas você não tiver implementado um método de tratamento de comando correspondente (como OnStop) o sistema gerará uma exceção e ignorará o comando.
Você não precisa implementar OnStart, OnStopou qualquer outro método em ServiceBase. No entanto, o comportamento do serviço é descrito em OnStart, portanto, no mínimo, esse membro deve ser substituído. A main()
função do executável registra o serviço no executável com o Gerenciador de Controle de Serviço chamando o Run método . A ServiceName propriedade do ServiceBase objeto passado para o Run método deve corresponder à ServiceName propriedade do instalador de serviço para esse serviço.
Você pode usar InstallUtil.exe
para instalar serviços em seu sistema.
Observação
Você pode especificar um log diferente do log de eventos do aplicativo para receber notificação de chamadas de serviço, mas nem a AutoLogEventLog propriedade nem podem gravar em um log personalizado. Defina AutoLog como false
se você não quiser usar o registro em log automático.
Construtores
ServiceBase() |
Cria uma nova instância da classe ServiceBase. |
Campos
MaxNameLength |
Indica o tamanho máximo para um nome de serviço. |
Propriedades
AutoLog |
Indica se os comandos Start, Stop, Pause e Continue devem ser relatados no log de eventos. |
CanHandlePowerEvent |
Obtém ou define um valor que indica se o serviço pode manipular notificações de alterações de status de energia do computador. |
CanHandleSessionChangeEvent |
Obtém ou define um valor que indica se o serviço pode manipular eventos de alteração de sessão recebidos de uma sessão do servidor Host da Sessão da Área de Trabalho Remota. |
CanPauseAndContinue |
Obtém ou define um valor que indica se o serviço pode estar em pausa e retomado. |
CanRaiseEvents |
Obtém um valor que indica se o componente pode acionar um evento. (Herdado de Component) |
CanShutdown |
Obtém ou define um valor que indica se o serviço deve ser notificado quando o sistema está sendo desligado. |
CanStop |
Obtém ou define um valor que indica se o serviço pode ser interrompido depois de ser iniciado. |
Container |
Obtém o IContainer que contém o Component. (Herdado de Component) |
DesignMode |
Obtém um valor que indica se o Component está no modo de design no momento. (Herdado de Component) |
EventLog |
Obtém um log de eventos que você pode usar para gravar a notificação de chamadas de comando de serviço, como iniciar e parar, no log de eventos do aplicativo. |
Events |
Obtém a lista de manipuladores de eventos que estão anexados a este Component. (Herdado de Component) |
ExitCode |
Obtém ou define o código de saída do serviço. |
ServiceHandle |
Obtém a alça de controle de serviço para o serviço. |
ServiceName |
Obtém ou define o nome curto usado para identificar o serviço no sistema. |
Site |
Obtém ou define o ISite do Component. (Herdado de Component) |
Métodos
CreateObjRef(Type) |
Cria um objeto que contém todas as informações relevantes necessárias para gerar um proxy usado para se comunicar com um objeto remoto. (Herdado de MarshalByRefObject) |
Dispose() |
Libera todos os recursos usados pelo Component. (Herdado de Component) |
Dispose(Boolean) |
Descarta os recursos (exceto a memória) usados pelo ServiceBase. |
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
GetLifetimeService() |
Obsoleto.
Recupera o objeto de serviço de tempo de vida atual que controla a política de ciclo de vida para esta instância. (Herdado de MarshalByRefObject) |
GetService(Type) |
Retorna um objeto que representa um serviço fornecido pelo Component ou pelo seu Container. (Herdado de Component) |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
InitializeLifetimeService() |
Obsoleto.
Obtém um objeto de serviço de tempo de vida para controlar a política de tempo de vida para essa instância. (Herdado de MarshalByRefObject) |
MemberwiseClone() |
Cria uma cópia superficial do Object atual. (Herdado de Object) |
MemberwiseClone(Boolean) |
Cria uma cópia superficial do objeto MarshalByRefObject atual. (Herdado de MarshalByRefObject) |
OnContinue() |
Quando implementado em uma classe derivada, OnContinue() é executado quando o comando Continuar é enviado para o serviço pelo SCM (Gerenciador de Controle de Serviço). Especifica as ações a serem tomadas quando um serviço retoma o funcionamento normal após estar em pausa. |
OnCustomCommand(Int32) |
Quando implementado em uma classe derivada, OnCustomCommand(Int32) é executado quando o SCM (Gerenciador de Controle de Serviço) passa um comando personalizado para o serviço. Especifica as ações a serem aditadas quando ocorrer um comando com o valor do parâmetro especificado. |
OnPause() |
Quando implementado em uma classe derivada, é executado quando o comando Pausar é enviado para o serviço pelo SCM (Gerenciador de Controle de Serviço). Especifica ações a serem tomadas quando a execução for colocada em pausa. |
OnPowerEvent(PowerBroadcastStatus) |
Quando implementada em uma classe derivada, será executada quando o status de energia do computador for alterado. Isso se aplica a computadores laptop quando entram no modo suspenso, que não é o mesmo que um desligamento do sistema. |
OnSessionChange(SessionChangeDescription) |
Executa quando um evento de alteração é proveniente de uma sessão do servidor Host da Sessão da Área de Trabalho Remota. |
OnShutdown() |
Quando implementado em uma classe derivada, é executado quando o sistema é desligado. Especifica o que deve ocorrer imediatamente antes do desligamento do sistema. |
OnStart(String[]) |
Quando implementado em uma classe derivada, é executado quando um comando Iniciar é enviado para o serviço pelo SCM (Gerenciador de Controle de Serviço) ou quando o sistema operacional é iniciado (para um serviço que inicia automaticamente). Especifica ações a serem tomadas quando o serviço for iniciado. |
OnStop() |
Quando implementado em uma classe derivada, é executado quando o comando Parar é enviado para o serviço pelo SCM (Gerenciador de Controle de Serviço). Especifica ações a serem tomadas quando a execução do serviço parar. |
RequestAdditionalTime(Int32) |
Solicita tempo adicional para uma operação pendente. |
RequestAdditionalTime(TimeSpan) |
Quando esse método é chamado de OnStart, OnStop, OnPause ou OnContinue, a dica de espera especificada é passada para o Service Control Manager para evitar que o serviço seja marcado como não respondendo. |
Run(ServiceBase) |
Registra o executável para um serviço com o Gerenciador de Controle de Serviço (SCM). |
Run(ServiceBase[]) |
Registra o executável para vários serviços com o SCM (Gerenciador de Controle de Serviço). |
ServiceMainCallback(Int32, IntPtr) |
Registra o manipulador de comandos e inicia o serviço. |
Stop() |
Interrompe o serviço em execução. |
ToString() |
Retorna um String que contém o nome do Component, se houver. Esse método não deve ser substituído. (Herdado de Component) |
Eventos
Disposed |
Ocorre quando o componente é disposto por uma chamada ao método Dispose(). (Herdado de Component) |