【问题标题】:Windows Listen to service Status ChangedWindows 侦听服务状态已更改
【发布时间】:2011-09-30 14:56:19
【问题描述】:

如何制作一个应用来监听服务状态更改事件的服务。 (我不想重复检查所有服务)

编辑

我需要它在 Windows XP / 2000 上工作

【问题讨论】:

    标签: c++ winapi qt service


    【解决方案1】:

    在 Vista 及以上版本中,您可以使用NotifyServiceStatusChange API。见一些sample code on MSDN

    如果您要监控多个服务,则必须为要监控的每项服务致电 NotifyServiceStatusChange

    【讨论】:

    • 抱歉编辑迟了。我忘了说我需要它才能在 Windows XP / 2000 上工作
    【解决方案2】:

    您正在寻找需要 Vista 的 NotifyServiceStatusChange。在 2000/XP 上,您需要轮询。

    【讨论】:

    • 我不是在寻找一项特定的服务。相反,我希望在 any 服务更改其状态时得到通知。并且仅适用于 Windows Vista 及更高版本。我需要为 Windows XP 和 2000 获取它
    • @Neel 枚举所有服务并为每个服务调用函数。
    • 抱歉编辑迟了。我忘了在问题上提到它,我需要它在 Windows XP / 2000 上工作
    • @Neel 你必须轮询那些操作系统。
    • 您的意思是重复检查所有服务列表吗?
    【解决方案3】:

    您可以将 WMI 与 SELECT * FROM __InstanceModificationEvent WHERE TargetInstance ISA 'Win32_Service' 之类的东西一起使用,然后检查 Win32_Service 类的 State 字段。

    【讨论】:

    • 并非如此。当然,您仍然需要查询对象以获取其新状态,但您会收到状态更改事件 asychronously
    • 呵呵,你是对的。来自documentationWMI 使用轮询来检测更改
    猜你喜欢
    • 2010-10-28
    • 2013-08-17
    • 2021-05-23
    • 1970-01-01
    • 2016-12-30
    • 2021-07-31
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    相关资源
    最近更新 更多