VC++ Service编程(四)服务ServiceMain函数
来源:互联网 发布:网络和ip地址计算 编辑:程序博客网 时间:2024/06/07 07:56
服务ServiceMain函数
当一个服务控制程序请求开启一个新的服务时,SCM(服务控制管理器)开启服务的同时,向控制调度器发送一个开始请求。控制调度器为服务创建一个新的线程来运行ServiceMain函数。
ServiceMain函数应该执行下面的这些任务:
1、立刻为服务调用RegisterServiceCtrlHandlerEx函数,用来注册一个处理控制请求的HandlerEx函数。RegisterServiceCtrlHandlerEx函数的返回值是一个service status handle(服务状态句柄),稍后向SCM通知当前服务状态会用到。
2、执行初始化。如果初始化的时间非常短(小于一秒),可以直接在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结构里的dwServiceSpecificExitCode和dwWin32ExitCode赋值,来标志错误。
- VC++ Service编程(四)服务ServiceMain函数
- VC++ Service编程(二)编写ServiceMain函数
- VC++ Service编程(三)服务入口
- VC++ Service编程(八)多线程服务
- VC++ Service编程(七)创建多线程服务
- 写一个ServiceMain函数
- VC++ Service编程(一)编写main函数
- VC++ Service编程(五)编写Control Handler函数
- VC++ Service编程(六)Control Handler函数
- ServiceMain
- WIN32服务程序(Service)VC++封装
- C语言Windows服务程序编写-ServiceMain
- 四大组件之(四)-->Service服务
- Android中的服务(service)详解(四)--系统服务
- VC++建立Service服务应用程序
- VC编程进行windows NT 服务程序的创建,删除,启动,停止 【NT Service编程】
- Android service(四)Intent服务
- VC 服务程序编程
- VC++ Service编程(二)编写ServiceMain函数
- 【熟悉引擎第三步】Cocos2d-x 3.x中使用物理引擎动态添加元素(点击事件)
- VC++ Service编程(三)服务入口
- Netlink实现热拔插监控
- 第十四周项目三 成绩大折腾
- VC++ Service编程(四)服务ServiceMain函数
- VC++ Service编程(五)编写Control Handler函数
- VC++ Service编程(六)Control Handler函数
- Java容器类基础
- hdu 1664 Different Digits, spoj 3929 , 同余,bfs
- jsp超链接传递中文乱码问题
- VC++ Service编程(七)创建多线程服务
- VC++ Service编程(八)多线程服务
- 不使用第三个变量交换两个变量的值之"异或"的实际应用