0

我正在尝试在 c# 中使用 System.Management 运行 wmi 查询并不断获取无效类。它适用于使用 pcoip 协议的 wmware 虚拟桌面。我可以使用 WMI Explorer,它显示如下。

在此处输入图像描述

在此处输入图像描述

这里只是一些示例 C# 代码。我知道它没有使用“使用”语句,我只是想保持简短。我注意到如果我在 WMI Explorer 中选择顶级命名空间并尝试运行查询,它会失败并出现相同的无效类错误,然后如果我单击 ROOT\CIMV2 并运行查询,它工作正常。我已经检查了范围等中的路径,它似乎是正确的。我也不能使用 Microsoft.Management.Infrastructure。

            var scope = new ManagementScope(ManagementPath.DefaultPath);
            var query = new SelectQuery("SELECT * from Win32_PerfRawData_TeradiciPerf_PCoIPSessionImagingStatistics");
            scope.Connect();
            var searcher = new ManagementObjectSearcher(scope, query);
            var collection = searcher.Get();

注意我可以使用 powershell 并使用检索

Get-WmiObject -Class "Win32_PerfRawData_TeradiciPerf_PCoIPSessionImagingStatistics"

更新:奇怪,但我注意到我可以在 WMI Explorer 中看到,但如果使用 WMI Code Creator,我看不到。

4

1 回答 1

1

LMAO ...好吧,看到它在 WMI Explorer 中工作,但在 WMI Code Creater 中却没有,让我开始思考,尤其是在查看了 WMI Explorer 的源代码并意识到它在代码方面和我做同样的事情之后。查看任务管理器,发现 WMI Explorer 作为 64 位应用程序运行,而 WMI Code Creator 运行在 32 位。那么在 64 编译之后,你知道它的工作原理是什么。我错误地假设所有 WMI 提供程序都有 32 位和 64 位版本,但显然情况并非如此。好消息是我想使用性能计数器而不是 WMI,在使用性能计数器而不是使用 WMI 查询编译为 64 后你知道什么,我现在也可以看到性能计数器类别。希望这是我今年最后一个空头时刻。

于 2020-09-05T09:02:16.490 回答