求助:64位Python3.6.4中win32serviceutil.QueryServiceStatus返回值含义
我明白你在64位Python3.6.4 + Windows 10环境下使用pywin32的win32serviceutil模块时的困惑——这个返回的6元素元组确实没有在pywin32的官方文档里给出直白说明,但它其实是对Windows原生API中SERVICE_STATUS结构体的直接映射,我来给你逐个拆解每个值的具体含义:
第一个元素:服务类型(Service Type)
这是一个整数,用来标识服务的运行模式,常见的取值包括:0x10(十进制16):对应SERVICE_WIN32_OWN_PROCESS,表示该服务以独立进程运行0x20(十进制32):对应SERVICE_WIN32_SHARE_PROCESS,表示该服务与其他服务共享一个进程0x1(十进制1):对应SERVICE_KERNEL_DRIVER,表示这是一个内核驱动服务
第二个元素:当前服务状态(Current State)
这个值代表服务当前的运行状态,最常用的几个取值是:1:SERVICE_STOPPED,服务已停止4:SERVICE_RUNNING,服务正在运行2:SERVICE_START_PENDING,服务正在启动过程中3:SERVICE_STOP_PENDING,服务正在停止过程中
第三个元素:可接受的控制命令掩码(Controls Accepted)
这是一个按位组合的整数,标识该服务能够响应哪些系统控制命令,常见的标志位包括:0x1:SERVICE_ACCEPT_STOP,允许接收停止服务的命令0x2:SERVICE_ACCEPT_PAUSE_CONTINUE,允许接收暂停/继续服务的命令0x4:SERVICE_ACCEPT_SHUTDOWN,允许接收系统关机时的通知命令
比如如果这个值是0x7,就表示服务同时接受停止、暂停/继续、关机这三种控制命令。
第四个元素:Win32退出代码(Win32 Exit Code)
如果服务是异常终止的,这里会返回对应的Windows系统错误码;如果服务是正常停止的,这个值通常为0(对应NO_ERROR)。第五个元素:服务特定退出代码(Service Specific Exit Code)
部分自定义服务会定义自己的退出码,只有当第四个元素的值为ERROR_SERVICE_SPECIFIC_ERROR(十进制1066)时,这个值才有效,代表服务自身定义的错误信息。第六个元素:检查点(Check Point)
当服务处于启动、停止、暂停或继续的过渡状态时(比如START_PENDING),这个值会逐步递增,用来表示操作的执行进度,帮助系统判断服务是否在正常推进操作。
如果需要验证某个具体值的含义,你可以把对应的整数和Windows API的常量做对照,或者结合你调用的具体win32serviceutil方法来进一步确认。
内容的提问来源于stack exchange,提问作者theParanoidAndroid

