我无法直接访问通过 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 在 System.Management.ManagementObject.Initialize(Boolean getObject) 处的 System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode) 处被捕获 Message="Invalid object path" Source="System.Management" StackTrace: Management.ManagementBaseObject.get_wbemObject() 在 System.Management.ManagementObject.get_ClassPath() 在 System.Management.ManagementObject.GetMethodParameters(String methodName, ManagementBaseObject& inParameters, IWbemClassObjectFreeThreaded& inParametersClass, IWbemClassObjectFreeThreaded& outParametersClass) 在 System.Management.ManagementObject.InvokeMethod(String methodName,对象 [] 参数)
感谢您的回复。
尼克- 我不知道该怎么做 :)
Uros - 因为这个MSDN 页面,我的印象是这是一个单例类。此外,在 WBEMTest 实用程序中打开该类会显示此.
实例对话框在这些字段中显示:“1 个对象”和“最大批次:1”并列出“Win32_OperatingSystem=@”
ManagementScope 被验证为工作,所以我不知道发生了什么。我是 WMI 新手,但这似乎是最简单的用例之一!