问题描述
我试图在c#中使用System.Management运行wmi查询,并保持获取无效类。它适用于使用pcoip协议的wmware虚拟桌面。我可以使用WMI Explorer,它显示如下。
这只是一些示例C#代码。我知道它没有使用“ using”语句,我只是想使其简短。我已经注意到,如果我在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,则看不到。
解决方法
LMAO ...很好地看到它可以在WMI Explorer中工作,但不能在WMI Code Creater中工作,这让我特别思考,尤其是在查看WMI Explorer的源代码并意识到它正在执行与我相同的代码方式之后。查看任务管理器,发现WMI Explorer是作为64位应用程序运行的,而WMI Code Creator是32位运行的。那么在编译成64之后,您知道它如何工作。我错误地假设所有WMI提供程序都具有32位和64位版本,显然情况并非如此。好消息是,我想使用性能计数器而不是WMI,并且在使用性能计数器而不是使用WMI查询编译为64之后,您知道什么了,现在我也可以看到性能计数器类别。希望那是我今年的最后一次空头时刻。