2010-03-22 2 views
0

WMI에서 설치된 Windows 버전에 대한 정보를 얻으려고합니다. 대부분의 필드가 작동합니다. 운영체제 "Name"과 "Version"을 얻을 수 있습니다. 둘 다 Win32_OperatingSystem 객체의 필드입니다.WMI Win32_OperatingSystem OSArchitecture 필드에서 예외가 발생합니다.

그러나 다른 필드 "OSArchitecture"는 예외 ("찾을 수 없음")를 생성합니다.

strScope = "\\" + strServer + "\root\CIMV2" 
    searcher = New ManagementObjectSearcher(strScope, "SELECT * FROM Win32_OperatingSystem") 

    For Each mo In searcher.Get 

     strOSName = mo("Name") 
     strOSVersion = mo("Version") 
     strOSArchitecture = mo("OSArchitecture") 
     strStatus = mo("Status") 
     strLastBoot = mo("LastBootUpTime") 

    Next 

문서는 필드가 존재 에게서는 있다고하고 문자열입니다

http://msdn.microsoft.com/en-us/library/aa394239(VS.85).aspx

어떤 아이디어? 당신은 질문 (아닌 실제 코드)에 간단한 오타 것을 확인했습니다 이제

strOSArchitecture = mo("OSArchitecture") 

:

strOSArchitecture = mo("Architecture") 

있었어야 :

+0

어리석은 질문일지도 모릅니다 ... win32 OS에서 쿼리를 실행하고 있습니까? x64 일 경우 여기에 없을 수도 있습니다. – cyberzed

+0

32 비트 Windows 7에서 실행 중입니다. –

답변

1

원래 질문은 라인을했다 다른 가능성은 서버 2003, 2000, NT4, XP 또는 Me/98/95에서 실행 중이며 설명서에 OSArchitecture 키를 사용할 수 없다고 표시되어 있습니까?

+0

죄송합니다. 실제로 그랬어. 나는 다른 이름을 시험해보고 수정하려고 시도한 후에 잘못된 버전의 코드를 붙여 넣었습니다. 예외는 "OSArchitecture"에서 발생합니다. 내 질문을 수정하겠습니다. –

+0

나는 그것이 목표 기계에 달려 있다는 것을 알게되었다. 저는 Gimel의 아이디어를 사용하여 moTest라는 작은 프로그램을 작성하여 2003 년과 2008 년의 컴퓨터에 대해 실행했습니다. 2008 시스템은 OSArchitecture 특성이있는 mo를 리턴했고 2003 시스템은 OSArchitecture 특성이없는 mo를 리턴했습니다. –

+0

답변을 편집하여 속성 이름의 수정을 제거하고 실제 답변 만 포함 할 수 있습니까? –

1

사용 가능한 속성의 현재 (런타임) 목록을 보려면 Properties 특성을 살펴보십시오. 내 XP 설치에

For Each mo In searcher.Get 
    Console.WriteLine("..." + mo.Properties.Count.ToString() + " properties") 
    For Each prop In mo.Properties 
     Console.WriteLine(prop.Name) 
    Next 
    '... 

, 더 OSArchitecture 나열된 61 속성 이름에 나타납니다 : 콘솔 응용 프로그램에서 , 그것은 것 같습니다.

+0

그것은 예외를 설명 할 것입니다. 그러나 실제 네이티브 WMI 클래스는 그러한 필드 (OSArchitecture)를 정의하기 때문에 왜 속성으로 존재하지 않을까요? 다리에 버그가 있니? –

관련 문제