ServiceBase Clase

Definición

Proporciona una clase base para un servicio que existirá como parte de una aplicación de servicio. Deberá derivarse de ServiceBase cuando se cree una nueva clase de servicio.

public ref class ServiceBase : System::ComponentModel::Component
public class ServiceBase : System.ComponentModel.Component
type ServiceBase = class
    inherit Component
Public Class ServiceBase
Inherits Component
Herencia
Derivado

Comentarios

Derive de ServiceBase al definir la clase de servicio en una aplicación de servicio. Cualquier servicio útil invalida los OnStart métodos y OnStop . Para obtener funcionalidad adicional, puede invalidar OnPause y OnContinue con un comportamiento específico en respuesta a los cambios en el estado del servicio.

Un servicio es un ejecutable de larga duración que no admite una interfaz de usuario y que podría no ejecutarse en la cuenta de usuario que ha iniciado sesión. El servicio se puede ejecutar sin que ningún usuario haya iniciado sesión en el equipo.

De forma predeterminada, los servicios se ejecutan en la cuenta del sistema, que no es la misma que la cuenta de administrador. No puede cambiar los derechos de la cuenta del sistema. Como alternativa, puede usar para ServiceProcessInstaller especificar una cuenta de usuario con la que se ejecutará el servicio.

Un archivo ejecutable puede contener más de un servicio, pero debe contener un elemento independiente ServiceInstaller para cada servicio. La ServiceInstaller instancia registra el servicio con el sistema. El instalador también asocia cada servicio a un registro de eventos que puede usar para registrar los comandos del servicio. La main() función del ejecutable define qué servicios deben ejecutarse. El directorio de trabajo actual del servicio es el directorio del sistema, no el directorio en el que se encuentra el ejecutable.

Al iniciar un servicio, el sistema localiza el archivo ejecutable y ejecuta el OnStart método para ese servicio, incluido en el ejecutable. Sin embargo, ejecutar el servicio no es lo mismo que ejecutar el ejecutable. El archivo ejecutable solo carga el servicio. Se accede al servicio (por ejemplo, iniciado y detenido) a través del Administrador de control de servicios.

El ejecutable llama al constructor de la ServiceBase clase derivada la primera vez que se llama a Start en el servicio. El OnStart método de control de comandos se llama inmediatamente después de que se ejecute el constructor. El constructor no se vuelve a ejecutar después de la primera vez que se ha cargado el servicio, por lo que es necesario separar el procesamiento realizado por el constructor de que realizó OnStart. Los recursos que se pueden liberar OnStop se deben crear en OnStart. La creación de recursos en el constructor impide que se creen correctamente si el servicio se inicia de nuevo después OnStop de haber liberado los recursos.

Service Control Manager (SCM) proporciona una manera de interactuar con el servicio. Puede usar el SCM para pasar los comandos Start, Stop, Pause, Continue o personalizados al servicio. El SCM usa los valores de CanStop y CanPauseAndContinue para determinar si el servicio acepta los comandos Stop, Pause o Continue. Stop, Pause y Continue están habilitados en los menús contextuales de SCM solo si la propiedad CanStop correspondiente o CanPauseAndContinue está true en la clase de servicio. Si está habilitado, se pasa el comando al servicio y OnStopse llama a , OnPauseo OnContinue . Si CanStop, CanShutdowno CanPauseAndContinue es false, el método de control de comandos correspondiente (por OnStopejemplo, ) no se procesará, aunque haya implementado el método .

Puede usar la ServiceController clase para realizar mediante programación lo que hace el SCM mediante una interfaz de usuario. Puede automatizar las tareas disponibles en la consola. Si CanStop, CanShutdowno es true , pero CanPauseAndContinue no ha implementado un método de control de comandos correspondiente (como OnStop), el sistema inicia una excepción y omite el comando.

No es necesario implementar OnStart, OnStopni ningún otro método en ServiceBase. Sin embargo, el comportamiento del servicio se describe en OnStart, por lo que, como mínimo, este miembro debe invalidarse. La main() función del archivo ejecutable registra el servicio en el ejecutable con el Administrador de control de servicios mediante una llamada al Run método . La ServiceName propiedad del ServiceBase objeto pasado al Run método debe coincidir con la ServiceName propiedad del instalador de servicio para ese servicio.

Puede usar InstallUtil.exe para instalar servicios en el sistema.

Nota:

Puede especificar un registro distinto del registro de eventos application para recibir notificaciones de llamadas de servicio, pero ni el AutoLog ni la EventLog propiedad pueden escribir en un registro personalizado. Establézcalo AutoLog en false si no desea usar el registro automático.

Constructores

ServiceBase()

Crea una nueva instancia de la clase ServiceBase.

Campos

MaxNameLength

Indica el tamaño máximo de un nombre de servicio.

Propiedades

AutoLog

Indica si los comandos Iniciar, Detener, Pausar y Continuar deben notificarse en el registro de eventos.

CanHandlePowerEvent

Obtiene o establece un valor que indica si el servicio puede controlar notificaciones de los cambios de estado de la alimentación del equipo.

CanHandleSessionChangeEvent

Obtiene o establece un valor que indica si el servicio puede controlar eventos de cambio de sesión recibidos de una sesión de Terminal Server.

CanPauseAndContinue

Obtiene o establece un valor que indica si se puede pausar y reanudar el servicio.

CanRaiseEvents

Obtiene un valor que indica si el componente puede generar un evento.

(Heredado de Component)
CanShutdown

Obtiene o establece un valor que indica si se debe informar al servicio de que el sistema se está cerrando.

CanStop

Obtiene o establece un valor que indica si puede detenerse el servicio una vez se ha iniciado.

Container

Obtiene la interfaz IContainer que contiene la clase Component.

(Heredado de Component)
DesignMode

Obtiene un valor que indica si Component está actualmente en modo de diseño.

(Heredado de Component)
EventLog

Obtiene un registro de eventos que se puede utilizar para escribir la notificación de llamadas de comandos de servicio, como Iniciar y Detener, en el registro de eventos de aplicación.

Events

Obtiene la lista de controladores de eventos asociados a Component.

(Heredado de Component)
ExitCode

Obtiene o establece el código de salida para el servicio.

ServiceHandle

Obtiene el identificador del control de servicios para el servicio.

ServiceName

Obtiene o establece el nombre corto utilizado para identificar el servicio en el sistema.

Site

Obtiene o establece ISite de Component.

(Heredado de Component)

Métodos

CreateObjRef(Type)

Crea un objeto que contiene toda la información relevante necesaria para generar un proxy utilizado para comunicarse con un objeto remoto.

(Heredado de MarshalByRefObject)
Dispose()

Libera todos los recursos que usa Component.

(Heredado de Component)
Dispose(Boolean)

Se deshace de los recursos (distintos de la memoria) que usa ServiceBase.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetLifetimeService()
Obsoletos.

Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
GetService(Type)

Devuelve un objeto que representa el servicio suministrado por Component o por Container.

(Heredado de Component)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
InitializeLifetimeService()
Obsoletos.

Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
MemberwiseClone(Boolean)

Crea una copia superficial del objeto MarshalByRefObject actual.

(Heredado de MarshalByRefObject)
OnContinue()

Si se implementa en una clase derivada, OnContinue() se ejecuta cuando el Administrador de control de servicios (SCM, Service Control Manager) envía un comando Continuar al servicio. Especifica las acciones que deben realizarse cuando se reanuda el funcionamiento normal de un servicio después de una pausa.

OnCustomCommand(Int32)

Si se implementa en una clase derivada, OnCustomCommand(Int32) se ejecuta cuando el Administrador de control de servicios (SCM, Service Control Manager) pasa un comando personalizado al servicio. Especifica las acciones que deben realizarse cuando se ejecuta un comando con el valor de parámetro especificado.

OnPause()

Si se implementa en una clase derivada, se ejecuta cuando el Administrador de control de servicios (SCM, Service Control Manager) envía un comando Pausar al servicio. Especifica las acciones que deben realizarse cuando un servicio realiza una pausa.

OnPowerEvent(PowerBroadcastStatus)

Si se implementa en una clase derivada, se ejecuta cuando el estado de la alimentación del equipo cambia. Esto se aplica a equipos portátiles cuando entran en modo suspendido, que no es lo mismo que un cierre de sistema.

OnSessionChange(SessionChangeDescription)

Se ejecuta cuando se recibe un evento de cambio de una sesión de Terminal Server.

OnShutdown()

Si se implementa en una clase derivada, se ejecuta cuando el sistema se está cerrando. Especifica lo que tiene que suceder inmediatamente antes de que se cierre el sistema.

OnStart(String[])

Si se implementa en una clase derivada, se ejecuta cuando el Administrador de control de servicios (SCM, Service Control Manager) envía un comando Iniciar al servicio o cuando se inicia el sistema operativo (en el caso de un servicio que se inicia de forma automática). Especifica las acciones que deben realizarse cuando se inicia el servicio.

OnStop()

Si se implementa en una clase derivada, se ejecuta cuando el Administrador de control de servicios (SCM, Service Control Manager) envía a un comando Detener al servicio. Especifica las acciones que deben realizarse cuando un servicio deja de ejecutarse.

RequestAdditionalTime(Int32)

Solicita tiempo adicional para una operación pendiente.

RequestAdditionalTime(TimeSpan)

Cuando se llama a este método desde OnStart, OnStop, OnPause o OnContinue, la sugerencia de espera especificada se pasa al Administrador de control de servicios para evitar que el servicio se marque como no responde.

Run(ServiceBase)

Registra el ejecutable para un servicio con el Administrador de control de servicios (SCM, Service Control Manager).

Run(ServiceBase[])

Registra el ejecutable para varios servicios con el Administrador de control de servicios (SCM, Service Control Manager).

ServiceMainCallback(Int32, IntPtr)

Registra el controlador de comandos e inicia el servicio.

Stop()

Detiene el servicio en ejecución.

ToString()

Devuelve una String que contiene el nombre del Component, si existe. Este método no se debe invalidar.

(Heredado de Component)

Eventos

Disposed

Tiene lugar cuando una llamada elimina el componente mediante una llamada al método Dispose().

(Heredado de Component)

Se aplica a

Consulte también