WMI-직접 액세스하는 단일의 인스턴스 Win32_OperatingSystem
-
09-06-2019 - |
문제
나는 데 문제가 직접 액세스 Win32_OperatingSystem 관리 클래스를 통해 노출 WMI.
그것은 단일 클래스고,나쁜 일정"Win32_OperatingSystem=@"이 올바른 경로를 구문을 얻을 인스턴스의 단일.
전화 InvokeMethod 생산하는 예외의 맨 아래에 나열된 질문지 않 액세스 클래스 경로 객실(주석)을 작성한다.
무엇이 잘못된 것입니까?
[제가 알기로는 사용할 수 있는 ManagementObjectSearcher/페의 컬렉션을 반환 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);
시스템입니다.Management.ManagementException 잡혔 Message="잘못된 개체 경로를" Source="시스템입니다."관리 StackTrace:에서 시스템입니다.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode) 에서 시스템입니다.Management.ManagementObject Initialize(Boolean 할 수) 에서 시스템입니다.Management.ManagementBaseObject.get_wbemObject() 에서 시스템입니다.Management.ManagementObject get_ClassPath() 에서 시스템입니다.Management.ManagementObject GetMethodParameters(문자열이 지,ManagementBaseObject&inParameters,IWbemClassObjectFreeThreaded&inParametersClass,IWbemClassObjectFreeThreaded&outParametersClass) 에서 시스템입니다.Management.ManagementObject InvokeMethod(문자열이 지,Object[]args)
답변 주셔서 감사합니다.
닉 -난 알 수 없는 방법에 대해 이동하는 일:)
청 -미국에서는 단일 등기 이 MSDN 페이지입니다.또한,열 등에서 WBEMTest 유틸리티를 보여줍 이.
인스턴스에 대화 상자에 표시됩:"1 개체"와"max.일괄 처리:1"그 분야에서 목록"Win32_OperatingSystem=@"
ManagementScope 으로 확인 작업,그래서 그가 무엇을 알고 하지 않습니다.나 WMI 초보,그러나 이 같은 것 하나의 간단한 사용 사례!
해결책
Wow,세상은 변화하고 있습니다.죄송하지 않았을 실현 사용하고 있다.당신이 볼 수 있습니다 기, 일들이 다른 뒤에는 Windows XP.그래서,어떤 일을 클릭하면"인스턴스"단추?
다른 팁
Win32_OperatingSystem 지 않는 단일 클래스를 확인하면 그것의 예선전,당신이 볼 수 없다는 단일정에 대해 정의된 그것은,그래서 당신은 당신을 사용해야 ManagementObjectSearcher.Get()또는 ManagementClass.GetInstances()있다하더라도 단 하나의 클래스의 인스턴스.Win32_OperatingSystem 키 속성은 이름은,그래서 거기를 얻을 수있는 옵션이 인스턴스에 직접 사용하여,
ManagementObject OS = new ManagementObject(@"Win32_OperatingSystem.Name='OSname'")
하지만 제 경험,OSName 무언가가 항상 다음과 같:
"Microsoft Windows XP Professional|C:\WINDOWS|\장치 Harddisk0\Partition1"
그래서 사용 ManagementObjectSearcher 은 아마도 가장 쉬운 솔루션입니다.
나는 단지 이것을 시도하고 간단한 응용 프로그램인
using System;
using System.Management;
namespace WmiPlay
{
class Program
{
static void Main(string[] args)
{
try
{
ManagementScope cimv2 = new ManagementScope(@"\\.\root\cimv2");
ManagementObject os = new ManagementObject(cimv2, new ManagementPath("Win32_OperatingSystem=@"), new ObjectGetOptions());
Console.Out.WriteLine(os);
}
catch (Exception ex)
{
Console.Error.WriteLine(ex);
}
}
}
}
이 당신을 위해 작동?나는 Visual Studio 에서 실행하는 일반적으로 관리자 권한으로 실행하에 Vista x64.
나는 100%확실한 답변,하지만 당신은 시도를 사용하는 반사체에서 볼 무엇 ManagementObjectSearcher 니까?을 제공할 수 있습니다 몇 가지 단서 당신이 무엇을 잘못입니다.
아일을 구성하는 쿼리를 가져옵 인스턴스는 기본=true.나는 사용하지 않은 Win32_OperatingSystem 에서는 동안,하지만 난 기억하는 것을 얻는 여러 인스턴스는 현재 부팅되었 주 같은 사실이다.
던컨 썼다:
인스턴스에 대화 상자에 표시됩:"1 개체"와"max.일괄 처리:1"에서 이러한 필드와>목"Win32_OperatingSystem=@"
그것은 확실히 보이는 그것과 같은 작업해야 합니다.테스트할 수 있습니다 당신의 오른쪽 단추로 클릭한 다음 단일 클래스 다음과 같:
"Win32_WmiSetting=@"
면 당신은 아직도 예외는 아니다.