ServiceMain函数

【勇芳软件工作室】汉化HomePreviousNext

ServiceMain功能是服务的入口点。

当服务控制程序请求新服务运行时,SCM启动服务并向控制分派器发送启动请求。控制调度程序创建一个新线程来执行该服务的ServiceMain功能。

ServiceMain功能应该执行以下任务:

1.立即调用RegisterServiceCtrlHandler函数注册一个处理器函数来处理服务的控制请求。RegisterServiceCtrlHandler的返回值是【服务状态句柄】,将用于通知SCM服务状态的呼叫。

2.初始化。如果初始化代码的执行时间预计非常短(少于1秒),则可以在ServiceMain中直接执行初始化。

如果初始化时间长于一秒钟,请调用SetServiceStatus功能,指定SERVICE_STATUS结构中的SERVICE_START_PENDING服务状态。随着初始化的进行,服务应该调用SetServiceStatus以报告进度。发送多个SetServiceStatus呼叫对于调试服务很有用。

3.初始化完成后,调用SetServiceStatus,在SERVICE_STATUS结构中指定SERVICE_RUNNING状态。

4.执行服务任务,或者如果没有挂起的任务,返回。任何服务状态的变化都需要致电SetServiceStatus来报告新的状态信息。

5.如果服务正在初始化或运行时发生错误,则服务应调用SetServiceStatus,指定SERVICE_STATUS结构中的SERVICE_STOP_PENDING状态,如果清理将冗长。清理完成后,从最后一个线程调用SetServiceStatus终止,在SERVICE_STATUS结构中指定SERVICE_STOPPED。请务必设置SERVICE_STATUS结构的dwServiceSpecificExitCodedwWin32ExitCode成员以识别错误。

有关详细信息,请参阅编写一个ServiceMain函数.