服务应用程序编程体系结构
Windows 服务应用程序基于从 System.ServiceProcess.ServiceBase 类继承的类。 从该类重写方法并为它们定义功能以确定服务的行为。
创建服务所涉及的类主要有:
System.ServiceProcess.ServiceBase -- 在创建服务时从 ServiceBase 类重写方法并定义代码,以确定服务在此继承类中的运行方式。
System.ServiceProcess.ServiceProcessInstaller 和 System.ServiceProcess.ServiceInstaller -- 使用这些类安装和卸载服务。
另外,可以使用名为 ServiceController 的类来操作服务本身。 该类不参与服务的创建,但是可以用于启动和停止服务、将命令传递给服务和返回一系列枚举。
定义服务的行为
在服务类中,重写基类函数,确定当服务状态在服务控制管理器更改后会带来何种结果。 ServiceBase 类公开下列方法,可以重写这些方法以添加自定义行为。
方法 |
重写以便 |
---|---|
指示当服务开始运行时应采取何种操作。 必须在此过程中为服务编写代码以执行有用的工作。 |
|
指示服务暂停时发生什么。 |
|
指示服务停止运行时发生什么。 |
|
指示服务在暂停后继续正常工作时发生什么。 |
|
指示在系统关闭前且服务正在运行时发生什么。 |
|
指示在服务接收到自定义命令时发生什么。 有关自定义命令的更多信息,请参见 MSDN Online。 |
|
指示接收到电源管理事件(如电池不足或操作挂起)时,服务如何响应。 |
提示
这些方法表示服务在其整个生存期中的状态;服务从一种状态转换为下一种状态。 例如,在调用 OnStart 之前,绝不可能使服务响应 OnContinue 命令。
还有其他几种感兴趣的属性和方法, 包括:
ServiceBase 类上的 Run 方法。 这是服务的主入口点。 使用 Windows 服务模板创建服务时,代码会插入到应用程序的 Main 方法中以运行服务。 此代码如下所示:
Dim ServicesToRun() As System.ServiceProcess.ServiceBase ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1()} System.ServiceProcess.ServiceBase.Run(ServicesToRun)
System.ServiceProcess.ServiceBase[] ServicesToRun; ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() }; System.ServiceProcess.ServiceBase.Run(ServicesToRun);
提示
这两个示例使用了 ServiceBase 类型的数组,应用程序包含的每个服务都可以添加到该数组中,然后所有这些服务可以一起运行。 但是,如果仅创建一个服务,则可以选择不使用该数组,而只是声明从 ServiceBase 继承的一个新对象并运行该对象。 有关示例,请参见如何:以编程方式编写服务。
ServiceBase 类上的一系列属性。 它们确定可以调用服务上的哪些方法。 例如,当 CanStop 属性设置为 true 时,可以调用服务上的 OnStop 方法。 当 CanPauseAndContinue 属性设置为 true 时,可以调用 OnPause 和 OnContinue 方法。 当将这些属性中的一种设置为 true 时,应接着重写关联方法并定义其处理。
还可以使用一个名为 ServiceController 的组件,以与现有服务通信并控制其行为。