WMI查询用于确定服务是否正在执行其工作

时间:2011-03-15 01:46:55

标签: visual-c++ wmi wmi-query

我设法使用WMI查询httpd.exe服务,以检查它是在运行还是停止。这是我正在玩的代码:

hres = pSvc->ExecQuery(
        bstr_t("WQL"), 
        bstr_t("SELECT * FROM Win32_Process Where Name='httpd.exe'"),
        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
        NULL,
        &pEnumerator);

现在我想查询服务正在使用的CPU数量。我想知道正在运行的服务是否正常工作。可以这样做吗?我问的是正确的问题吗?需要建议:)

1 个答案:

答案 0 :(得分:0)

使用Win32_Process,您可以获得UserModeTimeKernelModeTime(以100纳秒为单位),这样您就可以在一定时间内计算每个CPU的平均值。

假设您得到两个由Win32_Process分隔的TimeInterval个信息(以100纳秒为单位)。

UserTimeRate = ((UserModeTime2 - UserModeTime1) / TimeInterval) * 100;

KernelTimeRate =((KernelModeTime2 - KernelModeTime1) / TimeInterval) * 100;

CPU = (((UserModeTime2 - UserModeTime1) + (KernelModeTime2 - KernelModeTime1)) / TimeInterval) * 100;

如果您想从头开始,您可以从TimeInterval到现在计算CreationDate