我正在尝试用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找到.