문제

나는 데 문제가 직접 액세스 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=@"

면 당신은 아직도 예외는 아니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top