c# - ManagementException - 无效类

标签 c# .net wmi vmware wmi-query

我在查询 WMI 时遇到问题,这让我完全困惑。我正在构建的应用程序使用 WMI 计数器,这些计数器作为 VMware View Agent 的一部分安装到 VDI 桌面中。计数器提供有关远程显示协议(protocol) PCoIP 的信息。

我有查询计数器的工作代码:

ManagementObjectSearcher searcher = new ManagementObjectSearcher();

ObjectQuery generalQuery = new ObjectQuery("SELECT * FROM Win32_PerfRawData_TeradiciPerf_PCoIPSessionGeneralStatistics");

// Many other queries...

searcher.Query = generalQuery;
foreach (ManagementObject obj in searcher.Get())
{
  // Total session duration
  ulong sessionDurationSec = Convert.ToUInt64(obj["SessionDurationSeconds"]);
  // Get other items...
}

此代码来自现有的可用 .NET 3.5 应用程序。我现在已经创建了一个新的 .NET 4.0 应用程序,并且我使用的是完全相同的代码 - 每次都失败并出现“无效类”ManagementException。

我已验证应用程序权限是正确的,我还尝试在新的 .NET 4.0 应用程序中查询其他项目,如“Win32_Process”,并且它可以正常工作。

令人费解的是,计数器出现并在 perfmon 和 wmic 中正常工作:

http://hirstius.com/media/stackoverflow/perfmon.png

但是在 WMI CIM Studio 或 WMI Code Creator 中 - 什么都没有:

http://hirstius.com/media/stackoverflow/WMI_code_creator.png

在我能想到的所有方面,应用程序都是相同的 - app.manifest 中的权限相同,以相同的方式(通过计时器)调用完全相同的代码。唯一的区别是 .NET 3.5 与 4.0 - 但很明显,计数器存在,因为不止一个应用程序可以看到它们,但同样数量的应用程序不能。

有谁知道 .NET 3.5 和 4.0 之间可能会导致这种情况的差异吗?或者,为什么计数器可能对某些应用程序可见,而对其他应用程序不可见?是否缺少一些 .NET 4.0 所需的环境设置?目前我不知道去哪里进一步解决这个问题。

最佳答案

Hans Passant 的评论所述这个问题的答案是:

change the EXE project's platform target setting from x86 to AnyCPU

由 OP 确认:

I would guess that means the counters are 64bit only? It would also explain why certain apps could or could not see them - based upon which platform they were targeted for.

关于c# - ManagementException - 无效类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14804761/

相关文章:

c# - Winforms 设计器错误 "An error occured while parsing EntityName"

.net - http.sys 和响应时间记录

c++ - WMI 数据问题

c# - 如何解决 WMI 请求的 "Provider load failure"?

powershell - PowerShell:格式化Get-WmiObject输出以仅返回IP地址

c# - ModelState.isValid 为假,因为 Id 模型属性与传递的参数冲突

c# - Xamarin 形式的 iPhone X 中额外的底部和顶部空间

c# - 关于 C# DSL 语法的想法

c# - 如何使用 Mono.Cecil 从字节数组中解析 IL 指令

.net - 如何确定WPF窗口是否为模态窗口?