SERVICE_STATUS结构各成员解析
来源:互联网 发布:地图坐标编程软件 编辑:程序博客网 时间:2024/05/16 09:27
在编写Windows服务的时候,需要调用API函数::SetServiceStatus()向服务控制管理器(SCM)提交更新当前服务的状态信息,其第2个参数为指向SERVICE_STATUS结构的指针,SERVICE_STATUS结构中包含了表示当前服务状态的信息,对其各成员一一分析:、
DWORD dwServiceType;
DWORD dwCurrentState;
DWORD dwControlsAccepted;
DWORD dwWin32ExitCode;
DWORD dwServiceSpecificExitCode;
DWORD dwCheckPoint;
DWORD dwWaitHint;
} SERVICE_STATUS, *LPSERVICE_STATUS;
dwServiceType:指明服务可执行文件的类型。如果可执行文件中只有一个单独的服务,就把这个成员设置成SERVICE_WIN32_OWN_PROCESS;如果拥有多个服务的话,就设置成SERVICE_WIN32_SHARE_PROCESS。除了这两个标志之外,如果你的服务需要和桌面发生交互(当然不推荐这样做),就要用“|”运算符附加上SERVICE_INTERACTIVE_PROCESS。这个成员的值在服务的生存期内绝对不应该改变。
dwCurrentState:用于通知SCM此服务的现行状态。为了报告服务仍在初始化,应该把这个成员设置成SERVICE_START_PENDING。
dwControlsAccepted:指明服务接受什么样的控制通知。如果允许一个服务控制程序(SCP)去暂停/继续服务,就把它设成SERVICE_ACCEPT_PAUSE_CONTINUE。很多服务不支持暂停或继续,就必须自己决定在服务中它是否可用。如果你允许一个SCP去停止服务,就要设置它为SERVICE_ACCEPT_STOP。如果服务要在操作系统关闭的时候得到通知,设置它为SERVICE_ACCEPT_SHUTDOWN可以收到预期的结果。这些标志可以用“|”运算符组合。
dwCheckPoint和dwWaitHint:是一个服务用来报告它当前的事件进展情况的。当成员dwCurrentState被设置成SERVICE_START_PENDING的时候,应该把dwCheckPoint设成0,dwWaitHint设成一个经过多次尝试后确定比较合适的超时毫秒数,这样服务才能高效运行。一旦服务被完全初始化,就应该重新初始化SERVICE_STATUS结构的成员,更改dwCurrentState为SERVICE_RUNNING,然后把dwCheckPoint和dwWaitHint都改为0。【MSDN:Estimated time required for a pending start, stop, pause, or continue operation, in milliseconds. Before the specified amount of time has elapsed, the service should make its next call to the SetServiceStatus function with either an incremented dwCheckPoint value or a change in dwCurrentState. If the amount of time specified by dwWaitHint passes, and dwCheckPoint has not been incremented or dwCurrentState has not changed, the service control manager or service control program can assume that an error has occurred and the service should be stopped.】在dwWaitHint指定的超时时间到达之前,服务应该进行新的一次::SetServiceStatus()函数的调用,递增 dwCheckPoint或者改变dwCurrentState,如果dwWaitHint指定的超时时间已经过去(已经超时),既没有递增dwCheckPoint,又没有改变dwCurrentState,则服务控制管理器(SCM)或者服务控制程序(SCP)将假设一个错误已经发生,且服务应该停止。
0 0
- SERVICE_STATUS结构各成员解析
- SERVICE_STATUS结构各成员解析
- SERVICE_STATUS 结构中各成员分析
- SERVICE_STATUS
- T264_param_t, T264_t结构体成员解析
- termios结构体各成员
- termios结构体各成员
- 柔性数组结构成员
- 结构体成员排序
- 柔性数组结构成员
- 柔性数组结构成员
- 柔性数组结构成员
- 结构成员引用形式
- 结构体成员
- 结构体互为成员
- 结构体成员初始化
- FILE结构体成员
- 结构体互为成员
- 测试类型
- UVa10256
- Glide图片缓存知识点
- 学习Torch框架的该看的资料汇总
- thinkphp关联模版一对多查询失效
- SERVICE_STATUS结构各成员解析
- IOC(2)
- getopt()函数:分析命令行参数
- C#流程控制语句
- GreenDao 3.0使用
- Android动画总结(属性动画,补间动画,帧动画)
- iOS将汉字转成拼音
- thinkphp5的控制台的使用
- C#实现的CRC32算法