0

我一直在用 C# 编写一个程序,以从 WMI 中作为一个项目清除信息(我知道已经存在许多很棒的工具,但这既是为了学习,也是为了根据我管理的环境定制),我来了跨越几个怪事。目前让我失望的是以下代码段:

'using System.Management;

ManagementClass managementClass = new ManagementClass(new ManagementPath(@"\\" + pHostName + @"\root\" + pNameSpace));

EnumerationOptions enumOptions = new EnumerationOptions();
enumOptions.EnumerateDeep = false;

foreach(ManagementObject wmiClass in managementClass.GetSubclasses())
{
    Console.WriteLine(wmiClass["__Class"].ToString());
}'

鉴于 MSDN 文档和 VS 文档下的 System.Management.ManagementClass 的定义,我将重述它表示 CIM 类,以及返回所有子类集合的 GetSubclasses() 方法的定义在一个类下(在一个类是那里的关键短语下),我能得出的唯一合乎逻辑的结论是,WMI 中的命名空间实际上是一个类的实例,这听起来非常错误。

命名空间实际上是 WMI 中类的实例吗?如果没有,有谁知道为什么在命名空间上使用 ManagementClass 允许类清理?使用的语言真的让我很困惑。

编辑:要在这里回答这个问题。下面的 Hans Passant 指出 IWBEMPath 是问题的原因,并且 Namespaces 被 ManagementPath 视为目录和类,因为 IWbemPath 用于实例化 ManagementClass 的新实例。谢谢汉斯!

4

0 回答 0