ManagementException-无效的类

本文关键字:无效 ManagementException- | 更新日期: 2023-09-27 17:58:31

我在查询WMI时遇到了一个问题,这让我非常困惑。我正在构建的应用程序使用WMI计数器,这些计数器作为VMware View Agent的一部分安装到VDI桌面中。计数器提供有关远程显示协议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应用程序,并且使用完全相同的代码——每次都会出现"Invalid Class"ManagementException而失败。

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

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

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

但从WMI CIM Studio,或WMI代码创建者-什么都没有:

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

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

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

ManagementException-无效的类

正如Hans Passant的评论中所说,这个问题的答案是:

将EXE项目的平台目标设置从x86更改为AnyCPU

由OP:确认

我想这意味着计数器只有64位?它还将解释为什么某些应用程序可以或不能看到它们——基于它们的目标平台。