服务应用程序编程结构

更新:2007 年 11 月

Windows 服务应用程序基于从 System.ServiceProcess.ServiceBase 类继承的类。从该类重写方法并为它们定义功能以确定服务的行为。

创建服务所涉及的类主要有:

另外,可以使用名为 ServiceController 的类来操作服务本身。该类不参与服务的创建,但是可以用于启动和停止服务、将命令传递给服务和返回一系列枚举。

定义服务的行为

在服务类中,重写基类函数,确定当服务状态在服务控制管理器更改后会带来何种结果。ServiceBase 类公开下列方法,可以重写这些方法以添加自定义行为。

方法

重写以便

OnStart

指示当服务开始运行时应采取何种操作。必须在此过程中为服务编写代码以执行有用的工作。

OnPause

指示服务暂停时发生什么。

OnStop

指示服务停止运行时发生什么。

OnContinue

指示服务在暂停后继续正常工作时发生什么。

OnShutdown

指示在系统关闭前且服务正在运行时发生什么。

OnCustomCommand

指示在服务接收到自定义命令时发生什么。有关自定义命令的更多信息,请参见 MSDN Online。

OnPowerEvent

指示接收到电源管理事件(如电池不足或操作挂起)时,服务如何响应。

说明:

这些方法表示服务在其整个生存期中的状态;服务从一种状态转换为下一种状态。例如,在调用 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);
    
         System.ServiceProcess.ServiceBase ServicesToRun[];
            ServicesToRun = new System.ServiceProcess.ServiceBase[] 
              { new Service1() };
            System.ServiceProcess.ServiceBase.Run(ServicesToRun);
    
    说明:

    这两个示例使用了 ServiceBase 类型的数组,应用程序包含的每个服务都可以添加到该数组中,然后所有这些服务可以一起运行。但是,如果仅创建一个服务,则可以选择不使用该数组,而只是声明从 ServiceBase 继承的一个新对象并运行该对象。有关示例,请参见如何:以编程方式编写服务

  • ServiceBase 类上的一系列属性。它们确定可以调用服务上的哪些方法。例如,当 CanStop 属性设置为 true 时,可以调用服务上的 OnStop 方法。当 CanPauseAndContinue 属性设置为 true 时,可以调用 OnPauseOnContinue 方法。当将这些属性中的一种设置为 true 时,应接着重写关联方法并定义其处理。

    说明:

    服务必须至少重写 OnStartOnStop 才能有用。

还可以使用一个名为 ServiceController 的组件,以与现有服务通信并控制其行为。有关使用 ServiceController 的信息,请参见监视 Windows 服务

请参见

任务

如何:创建 Windows 服务

概念

Windows 服务应用程序介绍

其他资源

监视 Windows 服务