服务程序一般写成控制台应用程序,main函数为入口函数,main函数的参数在CreateService函数中指定。
当SCM启动一个服务程序时,SCM等待服务程序调用StartServiceCtrlDispatcher函数,如果服务进程没有及时调用该函数,则会导致启动服务失败。
如果StartServiceCtrlDispatcher函数执行成功,调用线程(也就是服务进程的主线程)不会返回,直到所有的服务进入到SERVICE_STOPPED状态。
调用线程扮演着控制分发的角色,干这样的事情:
1、在新的服务启动时启动新线程去调用服务主函数(主意:服务的任务是在新线程中做的);
2、当服务有请求时(注意:请求是由SCM发给它的),调用它对应的处理函数(主意:这相当于主线程“陷入”了,它在等待控制消息并对消息做处理)
3 调用RegisterServiceCtrlHandler