32.2.1 服务程序
在讨论服务的 .NET 实现方式之前,首先讨论服务的 Windows 体系和服务的内部功能。
服务程序实现服务的功能。一般来说,服务程序需要 3 个部分:
主函数
service-main函数
处理程序
在讨论这些部分前,首先需要介绍Service Control Manager (SCM)。对于服务来说, SCM的作用非常重要,它可以把启动服务或停止服务的请求发送给服务。
1. Service Control Manager (SCM)
Service Control Manager (SCM)是操作系统的一个组成部分,它的作用是与服务进行通信。图32-2阐明了这种通信处理UML序列的方式。
图 32-2
提示:
如果将服务设置为自动启动,则在系统启动时,将启动该服务的进程,进而调用该进程的主函数。服务负责为它的每一个服务都注册一个service-main函数。主函数是服务程序的入口,在这里,service-main函数的入口则必须用SCM注册。
2. 主函数、service-main和处理程序
服务的主函数可以注册多个 service-main 函数,它必须为所提供的每个服务注册一个 service-main 函数。服务程序可以在一个程序中提供许多服务,例如<windows>/system32/ services.exe这个服务程序就包括Alerter、 Application Management、Computer Browser和DHCP Client等服务。
SCM 现在为每一个应该启动的服务调用 service-main 函数。 Service-main 函数包含服务的功能。 service-main 函数的一个重要任务是用 SCM 注册处理程序。
处理程序函数是服务程序的第三部分,处理程序必须对来自 SCM 的事件作出响应。服务可以停止、暂停或重新开始,处理程序必须对这些事件做出响应。
一旦使用 SCM 注册了处理程序,服务控制程序可以把停止、暂停和继续服务的请求发送给 SCM 。服务控制程序独立于 SCM 和服务本身。在操作系统中有许多服务控制程序,以前介绍的 MMC Services 管理单元就是其中的一个。也可以编写自己的服务控制程序。一个比较好的服务控制程序是 SQL Server Service Manager ,如图 32-3 所示。
图 32-3