Compartilhar via


ServiceBase Classe

Definição

Fornece uma classe base para um serviço que existirá como parte de um aplicativo de serviço. ServiceBase deve ser derivado 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 quando definir sua classe de ServiceBase serviço em um aplicativo de serviço. Qualquer serviço útil substitui os métodos e OnStop os OnStart métodos. 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 do Sistema, que não é a mesma da conta de Administrador. Você não pode alterar os direitos da conta do sistema. Como alternativa, você pode usar uma 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 parado) por meio do Service Control Manager.

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 em que o serviço foi carregado, portanto, é necessário separar o processamento executado pelo construtor daquele executado por OnStart. Todos os recursos que podem ser liberados devem OnStop ser criados em OnStart. A criação de recursos no construtor impede que eles sejam criados corretamente se o serviço for iniciado novamente após OnStop a liberação 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 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 for processado, mesmo se você tiver 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 implementou 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 Service Control Manager 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 o sc create comando para instalar serviços direcionados ao .NET moderno ou usar InstallUtil.exe para instalar serviços direcionados ao .NET Framework.

Observação

Você pode especificar um log diferente do log de eventos do aplicativo para receber a notificação de chamadas de serviço, mas nem a AutoLog propriedade nem a EventLog propriedade podem gravar em um log personalizado. Defina AutoLog como false se você não quiser usar o log automático.

Construtores

Nome Description
ServiceBase()

Cria uma nova instância da ServiceBase classe.

Campos

Nome Description
MaxNameLength

Indica o tamanho máximo de um nome de serviço.

Propriedades

Nome Description
AutoLog

Indica se os comandos Iniciar, Parar, Pausar e Continuar devem ser relatados no log de eventos.

CanHandlePowerEvent

Obtém ou define um valor que indica se o serviço pode lidar com 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 lidar com eventos de alteração de sessão recebidos de uma sessão do Terminal Server.

CanPauseAndContinue

Obtém ou define um valor que indica se o serviço pode ser pausado e retomado.

CanRaiseEvents

Obtém um valor que indica se o componente pode gerar 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 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 anexados a isso Component.

(Herdado de Component)
ExitCode

Obtém ou define o código de saída do serviço.

ServiceHandle

Obtém o identificador de controle de serviço para o serviço.

ServiceName

Obtém ou define o nome curto usado para identificar o serviço para o sistema.

Site

Obtém ou define o ISiteComponent.

(Herdado de Component)

Métodos

Nome Description
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 (além da memória) usados ServiceBasepelo .

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 tempo de vida para essa instância.

(Herdado de MarshalByRefObject)
GetService(Type)

Retorna um objeto que representa um serviço fornecido pelo Component ou por sua 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 dessa instância.

(Herdado de MarshalByRefObject)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto atual MarshalByRefObject .

(Herdado de MarshalByRefObject)
OnContinue()

Quando implementado em uma classe derivada, OnContinue() é executado quando um comando Continue é enviado ao serviço pelo SCM (Service Control Manager). Especifica as ações a serem executadas quando um serviço retoma o funcionamento normal após ser pausado.

OnCustomCommand(Int32)

Quando implementado em uma classe derivada, OnCustomCommand(Int32) é executado quando o SCM (Service Control Manager) passa um comando personalizado para o serviço. Especifica ações a serem executadas quando ocorrer um comando com o valor do parâmetro especificado.

OnPause()

Quando implementado em uma classe derivada, é executado quando um comando Pause é enviado ao serviço pelo SCM (Service Control Manager). Especifica as ações a serem executadas quando um serviço é pausado.

OnPowerEvent(PowerBroadcastStatus)

Quando implementado em uma classe derivada, é executado quando o status de energia do computador é alterado. Isso se aplica a computadores portáteis quando eles entram no modo suspenso, o que não é o mesmo que um desligamento do sistema.

OnSessionChange(SessionChangeDescription)

É executado quando um evento de alteração é recebido de uma sessão do Terminal Server.

OnShutdown()

Quando implementado em uma classe derivada, é executado quando o sistema está sendo desligado. Especifica o que deve ocorrer imediatamente antes do sistema ser desligado.

OnStart(String[])

Quando implementado em uma classe derivada, é executado quando um comando Iniciar é enviado ao serviço pelo SCM (Service Control Manager) ou quando o sistema operacional é iniciado (para um serviço que é iniciado automaticamente). Especifica as ações a serem executadas quando o serviço é iniciado.

OnStop()

Quando implementado em uma classe derivada, é executado quando um comando Stop é enviado ao serviço pelo SCM (Service Control Manager). Especifica as ações a serem executadas quando um serviço para de ser executado.

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 Gerenciador de Controle de Serviço para evitar que o serviço seja marcado como não respondendo.

Run(ServiceBase)

Registra o executável para um serviço com o SCM (Service Control Manager).

Run(ServiceBase[])

Registra o executável para vários serviços com o SCM (Service Control Manager).

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

Nome Description
Disposed

Ocorre quando o componente é descartado por uma chamada para o Dispose() método.

(Herdado de Component)

Aplica-se a

Confira também