【发布时间】:2010-09-08 13:04:29
【问题描述】:
我无法直接访问通过 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 错误代码) 在 System.Management.ManagementObject.Initialize(布尔 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)
感谢您的回复。
尼克 - 我不知道该怎么做 :)
Uros - 因为this MSDN 页面,我觉得这是一个单例类。此外,在 WBEMTest 实用程序中打开类会显示 this。
实例对话框显示:“1 个对象”和“最大批次:1”在这些字段中并列出“Win32_OperatingSystem=@”
已验证 ManagementScope 可以正常工作,所以我不知道发生了什么。我是 WMI 新手,但这似乎是最简单的用例之一!
【问题讨论】:
标签: c# windows-vista windows-xp wmi