我正在尝试解决某个服务的一些问题,包括某个服务无法正常启动。因此我输入了以下命令sc queryex <servicename>
(文档这里)大多数结果都相当清楚或至少有些清楚—— SERVICE_NAME
,,,。TYPE
STATE
PID
但是有两个值我找不到任何文档说明:CHECKPOINT
和WAIT_HINT
。各个代码是什么意思?我得到的都是十六进制值(例如 0x7530 或 0x61a8),但我找不到任何关于它们实际含义的解释。
答案1
奇怪的是,关于这些值的文档很难找到。我终于在文章中找到了它 板条箱 windows_service:
当系统启动实现 Windows 服务的应用程序时,它会自动放入开始待处理状态。
应用程序需要完成初始化,获取 服务状态句柄(看服务控制处理程序::注册)并过渡到跑步状态。
如果服务的初始化过程很长,它应该立即告诉系统需要多少时间才能完成初始化,方法是发送 开始待处理状态,时间估计使用服务状态::wait_hint并增加服务状态::检查点每次服务完成初始化的一个步骤时。
系统将尝试终止无法在建议的 服务状态::wait_hint已到期。
在其他待处理状态与其对应的目标状态之间转换时也适用相同的概念。
答案2
我在 MSDN 中找到了一些描述Win32_服务班级
- 检查点
服务定期递增的值,用于在长时间启动、停止、暂停或继续操作期间报告其进度。例如,服务在启动时完成其初始化的每个步骤时都会递增此值。调用服务操作的用户界面程序使用此值来跟踪服务在长时间操作期间的进度。当服务没有待处理的启动、停止、暂停或继续操作时,此值无效,应为零。
- 等待提示
待处理的启动、停止、暂停或继续操作所需的估计时间(以毫秒为单位)。在指定的时间过去后,服务将使用增加的 CheckPoint 值或更改的 CurrentState 再次调用 SetServiceStatus 方法。如果 WaitHint 指定的时间量过去,而 CheckPoint 尚未增加,或者 CurrentState 尚未更改,则服务控制管理器或服务控制程序将假定发生了错误。