c# - WMI - 直接访问 Win32_OperatingSystem 的单例实例

标签 c# windows-vista windows-xp wmi

我无法直接访问通过 WMI 公开的 Win32_OperatingSystem 管理类。

这是一个单例类,我很确定“Win32_OperatingSystem=@”是获取单例实例的正确路径语法。

调用 InvokeMethod 会产生问题底部列出的异常,访问 ClassPath 属性(注释行)也是如此。

我做错了什么?

[我知道我可以使用 ManagementObjectSearcher/ObjectQuery 返回 Win32_OperatingSystem 的集合(它只包含一个),但因为我知道它是一个单例,所以我想直接访问它。]


ManagementScope cimv2 = InitScope(string.Format(@"\\{0}\root\cimv2", this.Name));

ManagementObject os = new ManagementObject(
    cimv2,
    new ManagementPath("Win32_OperatingSystem=@"),
    new ObjectGetOptions());

//ManagementPath p = os.ClassPath;

os.InvokeMethod("Reboot", null);

System.Management.ManagementException 被捕获 Message="无效的对象路径" 来源=“系统.管理” 堆栈跟踪: 在 System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode) 在 System.Management.ManagementObject.Initialize(Boolean getObject) 在 System.Management.ManagementBaseObject.get_wbemObject() 在 System.Management.ManagementObject.get_ClassPath() 在 System.Management.ManagementObject.GetMethodParameters(字符串方法名称、ManagementBaseObject& inParameters、IWbemClassObjectFreeThreaded& inParametersClass、IWbemClassObjectFreeThreaded& outParametersClass) 在 System.Management.ManagementObject.InvokeMethod(String methodName, Object[] args)


感谢您的回复。

Nick - 我不知道该怎么做 :)

Uros - 由于 this,我的印象是它是一个单例类MSDN 页面。此外,在 WBEMTest 实用程序中打开类显示 this .


实例对话框在这些字段中显示:“1 个对象”和“最大批处理:1”并列出“Win32_OperatingSystem=@”

ManagementScope 已验证为正常工作,所以我不知道发生了什么。我是 WMI 新手,但这似乎是最简单的用例之一!

最佳答案

Win32_OperatingSystem 不是单例类 - 如果您检查它的限定符,您会发现没有为其定义单例限定符,因此您必须使用 ManagementObjectSearcher.Get() 或 ManagementClass.GetInstances(),即使该类只有一个实例。 Win32_OperatingSystem 关键属性是 Name,因此可以选择直接获取实例,使用

ManagementObject OS = new ManagementObject(@"Win32_OperatingSystem.Name='OSname'")

但根据我的经验,OSName 总是类似于:

“Microsoft Windows XP Professional|C:\WINDOWS|\Device\Harddisk0\Partition1”

因此使用 ManagementObjectSearcher 可能是最简单的解决方案。

关于c# - WMI - 直接访问 Win32_OperatingSystem 的单例实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56208/

相关文章:

c# - 用 Mono 编译 IronPython

c# - Label 能否获得焦点?

windows-vista - 您最好的 'must have' 开发工具列表是什么?

c++ - 使用 GCC 4.6.2 C++ Qt、MinGW、Vista 设置堆栈大小

用 win7 编写的 winforms 应用程序在 win xp 上看起来不同。为什么?

windows - Windows XP 上保存的 'run' 对话的历史记录在哪里?

perl - 我如何处理由我从 Perl 启动的程序引发的对话框?

c# - 检测程序是否由 Visual Studio 运行,而不是从 Windows 资源管理器运行

python - PyWin32:Windows 经典主题

c# - 在 .NET 中从 YouTube 获取 FLV