ServiceBase 类

定义

为将作为服务应用程序的一部分而存在的服务提供基类。 在创建新的服务类时,必须从 ServiceBase 派生。

public ref class ServiceBase : System::ComponentModel::Component
public class ServiceBase : System.ComponentModel.Component
type ServiceBase = class
    inherit Component
Public Class ServiceBase
Inherits Component
继承
派生

注解

在服务应用程序中定义服务类时派生自 ServiceBase 。 任何有用的服务都 OnStart 替代 和 OnStop 方法。 对于其他功能,可以使用特定行为替代 OnPauseOnContinue 以响应服务状态的更改。

服务是一个长时间运行的可执行文件,它不支持用户界面,并且可能不会在登录的用户帐户下运行。 该服务可以在没有任何用户登录到计算机的情况下运行。

默认情况下,服务在系统帐户下运行,这与管理员帐户不同。 无法更改系统帐户的权限。 或者,可以使用 ServiceProcessInstaller 来指定运行服务的用户帐户。

可执行文件可以包含多个服务,但必须为每个服务包含一个单独的 ServiceInstaller 服务。 实例 ServiceInstaller 向系统注册服务。 安装程序还会将每个服务与可用于记录服务命令的事件日志相关联。 main()可执行文件中的 函数定义应运行哪些服务。 服务的当前工作目录是系统目录,而不是可执行文件所在的目录。

启动服务时,系统会查找可执行文件,并运行 OnStart 包含在可执行文件中的该服务的方法。 但是,运行服务与运行可执行文件不同。 可执行文件仅加载服务。 访问服务 (例如,通过服务控制管理器启动和停止) 。

首次在服务上 ServiceBase 调用 Start 时,可执行文件会调用派生类的构造函数。 命令 OnStart 处理方法在执行构造函数后立即调用。 构造函数在首次加载服务后不会再次执行,因此有必要将构造函数执行的处理与 执行的 OnStart处理分开。 可通过 释放 OnStop 的任何资源都应在 中创建 OnStart。 如果在释放资源后 OnStop 再次启动服务,在构造函数中创建资源会阻止正确创建资源。

服务控制管理器 (SCM) 提供了一种与服务交互的方法。 可以使用 SCM 将 Start、Stop、Pause、Continue 或自定义命令传递到服务中。 SCM 使用 和 CanPauseAndContinue 的值CanStop来确定服务是接受 Stop、Pause 还是 Continue 命令。 仅当相应的属性 CanStopCanPauseAndContinue 位于 true 服务类中时,SCM 的上下文菜单中才会启用“停止”、“暂停”和“继续”。 如果启用,则命令将传递给服务,并 OnStop调用 、 OnPauseOnContinue 。 如果 CanStopCanShutdownCanPauseAndContinuefalse,则不会处理相应的命令处理方法 ((如 OnStop) ),即使已实现 该方法也是如此。

可以使用 ServiceController 类以编程方式执行 SCM 使用用户界面执行的操作。 可以自动执行控制台中提供的任务。 如果 CanStopCanShutdownCanPauseAndContinuetrue ,但尚未实现相应的命令处理方法 ((如 OnStop) 则系统将引发异常并忽略该命令。

无需在 中ServiceBase实现 OnStartOnStop或任何其他方法。 但是,服务的行为在 中 OnStart描述,因此至少应重写此成员。 main()可执行文件的 函数通过调用 Run 方法将可执行文件中的服务注册到服务控制管理器。 ServiceName传递给 Run 方法的 ServiceBase 对象的 属性必须与该服务的服务安装程序的 属性匹配ServiceName

可以使用 InstallUtil.exe 在系统上安装服务。

注意

可以指定应用程序事件日志以外的日志来接收服务调用的通知,但 和 EventLog 属性都AutoLog不能写入自定义日志。 false如果不想使用自动日志记录,请将 设置为 AutoLog

构造函数

ServiceBase()

创建 ServiceBase 类的新实例。

字段

MaxNameLength

指示服务名称的最大大小。

属性

AutoLog

指示是否在事件日志中报告“开始”、“停止”、“暂停”以及“继续”命令。

CanHandlePowerEvent

获取或设置一个值,该值指示服务是否可以处理计算机电源状态更改通知。

CanHandleSessionChangeEvent

获取或设置一个值,该值指示服务是否可以处理从终端服务器会话接收到的会话更改事件。

CanPauseAndContinue

获取或设置指示服务是否可以暂停并再继续的值。

CanRaiseEvents

获取一个指示组件是否可以引发事件的值。

(继承自 Component)
CanShutdown

获取或设置一个值,该值指示系统关闭时是否应通知服务。

CanStop

获取或设置一个值,该值指示服务启动后是否可以停止。

Container

获取包含 IContainerComponent

(继承自 Component)
DesignMode

获取一个值,用以指示 Component 当前是否处于设计模式。

(继承自 Component)
EventLog

获取一个事件日志,它可用于将服务命令调用的通知(如“开始”和“停止”)写入“应用程序”事件日志。

Events

获取附加到此 Component 的事件处理程序的列表。

(继承自 Component)
ExitCode

获取或设置服务的退出代码。

ServiceHandle

获取服务的服务控制句柄。

ServiceName

获取或设置用于向系统标识服务的简短名称。

Site

获取或设置 ComponentISite

(继承自 Component)

方法

CreateObjRef(Type)

创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。

(继承自 MarshalByRefObject)
Dispose()

释放由 Component 使用的所有资源。

(继承自 Component)
Dispose(Boolean)

处置由 ServiceBase 占用的资源(内存除外)。

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetLifetimeService()
已过时.

检索控制此实例的生存期策略的当前生存期服务对象。

(继承自 MarshalByRefObject)
GetService(Type)

返回一个对象,该对象表示由 Component 或它的 Container 提供的服务。

(继承自 Component)
GetType()

获取当前实例的 Type

(继承自 Object)
InitializeLifetimeService()
已过时.

获取生存期服务对象来控制此实例的生存期策略。

(继承自 MarshalByRefObject)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
MemberwiseClone(Boolean)

创建当前 MarshalByRefObject 对象的浅表副本。

(继承自 MarshalByRefObject)
OnContinue()

在派生类中实现时,OnContinue() 于“服务控制管理器”(SCM) 将“继续”命令发送到服务时运行。 指定要在服务暂停后恢复正常功能时采取的操作。

OnCustomCommand(Int32)

在派生类中实现时,OnCustomCommand(Int32) 于“服务控制管理器”(SCM) 向服务传递自定义命令时执行。 指定要在具有指定参数值的命令出现时采取的操作。

OnPause()

在派生类中实现时,该方法于“服务控制管理器”(SCM) 将“暂停”命令发送到服务时执行。 指定要在服务暂停时采取的操作。

OnPowerEvent(PowerBroadcastStatus)

当在派生类中实现时,该方法于计算机电源状态更改时执行。 这适用于膝上型计算机进入挂起模式时的情况,该模式不同于系统关闭。

OnSessionChange(SessionChangeDescription)

从终端服务器会话接收到更改事件时执行。

OnShutdown()

在派生类中实现时,该方法于系统即将关闭时执行。 该方法指定应在系统即将关闭前执行的处理。

OnStart(String[])

当在派生类中实现时,在下列情况下执行:在“服务控制管理器”(SCM) 向服务发送“开始”命令时,或者在操作系统启动时(对于自动启动的服务)。 指定服务启动时采取的操作。

OnStop()

在派生类中实现时,该方法于“服务控制管理器”(SCM) 将“停止”命令发送到服务时执行。 指定服务停止运行时采取的操作。

RequestAdditionalTime(Int32)

为挂起操作请求额外的时间。

RequestAdditionalTime(TimeSpan)

从 OnStart、OnStop、OnPause 或 OnContinue 调用此方法时,指定的等待提示将传递给服务控制管理器,以避免将服务标记为未响应。

Run(ServiceBase)

在服务控制管理器 (SCM) 中注册服务的可执行文件。

Run(ServiceBase[])

在服务控制管理器 (SCM) 中注册多项服务的可执行文件。

ServiceMainCallback(Int32, IntPtr)

注册命令处理程序并启动服务。

Stop()

停止执行服务。

ToString()

返回包含 Component 的名称的 String(如果有)。 不应重写此方法。

(继承自 Component)

事件

Disposed

在通过调用 Dispose() 方法释放组件时发生。

(继承自 Component)

适用于

另请参阅