我正在尝试使用 WMI 获取 CPU 使用率数据。为此,我使用
Win32_PerfRawData_PerfProc_Process
类。当我运行下面的代码时,我没有得到任何结果。
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2","SELECT * FROM Win32_PerfRawData_PerfProc_Process");
var data = searcher.Get();
直到这里没有任何错误,如果我尝试使用数据对象,应用程序会等待直到我关闭它。
我做了一些研究,但没有发现任何有用的东西。
注意:其他 WMI 类查询工作正常。我需要使用 WMI(不是性能计数器)。
请查看注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\PerfProc\Performance 以及此处“禁用性能计数器”的值。应该将其设置为“0”才能使该类正常工作。
我最初关注的是这篇 msdn 文章,并使用 dcomcnfg + wmimgmt.msc 直接添加我的用户:
https://learn.microsoft.com/en-us/windows/win32/wmisdk/securing-a-remote-wmi-connection
结果是我可以读取并获取许多 WMI 查询的结果,例如:
但是 Win32_PerfRawData_PerfProc_Process 总是远程给出空结果(在本地返回数据)。
解决方案是将我的用户添加到计算机管理/本地用户和组中的性能监视器用户组