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 方法。 对于其他功能,可以替代 OnPause 特定 OnContinue 行为,以响应服务状态的更改。

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

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

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

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

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

服务控制管理器 (SCM) 提供了与服务交互的方法。 可以使用 SCM 将“开始”、“停止”、“暂停”、“继续”或自定义命令传递到服务中。 SCM 使用值CanStopCanPauseAndContinue并确定服务是否接受“停止”、“暂停”或“继续”命令。 仅当相应的属性CanStop或位于服务类中时,SCM 的上下文菜单中才会启用“停止”、“暂停”和trueCanPauseAndContinue“继续”。 如果已启用,该命令将传递给服务,或者OnStopOnPause调用或OnContinue调用该命令。 CanShutdown如果CanStop(或CanPauseAndContinuefalse)相应的命令处理方法 ((如OnStop) )不会处理,即使你已实现该方法也是如此。

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

你不必实现 OnStartOnStop也不必实现 ServiceBase任何其他方法。 但是,服务的行为在 OnStart至少应重写此成员。 可执行文件 main() 的函数通过调用 Run 方法向 Service Control Manager 注册可执行文件中的服务。 ServiceName传递给Run该方法的对象的属性ServiceBase必须与该服务的服务安装程序的属性匹配ServiceName

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

备注

可以指定应用程序事件日志以外的日志来接收服务调用通知,但 AutoLog 属性也不能 EventLog 写入自定义日志。 Set AutoLog to false if you do not want to use automatic logging.

构造函数

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)

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

Run(ServiceBase)

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

Run(ServiceBase[])

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

ServiceMainCallback(Int32, IntPtr)

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

Stop()

停止执行服务。

ToString()

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

(继承自 Component)

事件

Disposed

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

(继承自 Component)

适用于

另请参阅