我正在尝试用 C 编写一个程序,它可以检测某些 Windows 服务(也称为 NT 服务)何时启动或停止。
好像有一个函数NotifyServiceStatusChange ,但这仅适用于 Vista 和 Windows 7。我正在尝试在 Win XP 上执行此操作,那么最好的方法是什么?除了连续轮询,还有其他的吗?
编辑:
有人能用 C 给出答案吗?我也可以使用 C++,但我想远离脚本。
最佳答案
看起来您在 XP 中可以获得的最接近的是 QueryServiceStatusEx (单一服务)或 EnumServicesStatusEx (多项服务)。
为了避免重复调用其中任何一个,一些人推荐 WMI 设置,查询 Win32_Service
的 state
属性。见this thread底部了解更多详情。
以下是一个(基本)WMI 脚本,用于监视警报器服务的状态:
strComputer = "."
Set objSWbemServices = GetObject("winmgmts:" &_
"{impersonationLevel=impersonate}!" &_
"\\" & strComputer & "\root\cimv2")
Set objEventSource = objSWbemServices.ExecNotificationQuery( _
"SELECT * FROM __InstanceModificationEvent " &_
"WITHIN 10 " &_
"WHERE TargetInstance " &_
"ISA 'Win32_Service' " &_
"AND TargetInstance.Name = 'alerter'")
Set objEventObject = objEventSource.NextEvent()
Wscript.Echo "The status of the alerter service just changed."
以上内容和其他示例可在 this TechNet page 上找到.
关于c - windows xp下如何监控windows服务的状态变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1189815/