.net

2009-10-28 6 views
0

을 사용하여 설치된 Windows 버전을 확인하는 방법 System.Environment.OSVersion은 설치된 Windows 2003 버전 (Standard, Enterprise, DataCenter)을 나타내지 않습니다..net

관리 코드 만 사용하여이 정보에 액세스 할 수있는 방법이 있습니까?

P/Invoke를 사용하여 GetVersionEx를 호출하고 OSVERSIONINFOEX.wSuiteMask를 검사하여이 정보를 얻을 수 있음을 알고 있지만 더 간단한 해결책을 찾고 있습니다. 하여 Win32_OperatingSystem의 OSProductSuite 속성은 Name 속성보다 신뢰성 보이지만 WMI를 사용

업데이트

는 길을 가야하는 것 같습니다. 다음은 샘플 코드입니다.

ManagementScope scope = new ManagementScope(); 
ObjectQuery query = new ObjectQuery("SELECT name, csdversion, description, OperatingSystemSKU, OSProductSuite FROM Win32_OperatingSystem"); 

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query)) 
{ 
    using (ManagementObjectCollection resultCollection = searcher.Get()) 
    { 
     foreach (ManagementObject result in resultCollection) 
     { 
      foreach (PropertyData propertyData in result.Properties) 
      { 
       Debug.WriteLine(
        propertyData.Name + ": " + 
        ((propertyData.Value == null) ? "" : propertyData.Value.ToString()) 
        ); 
      } 
     } 
    } 
} 
+0

pinvoke way는 꽤 단순 해 보입니다. – leppie

답변

4

다음과 같은 WMI 쿼리를 실행할 수 있습니다 :

마이크로 소프트 윈도우 서버 2003 스탠다드 에디션 | C :의 Win32_OperatingSystem

그것은이 같은 반환로부터

SELECT 이름을 \ WINDOWS가 | Harddisk0을 \ \ 장치 \ Partition1

This article은 .NET을 사용하여 WMI 쿼리를 수행하는 방법을 설명합니다.

+0

감사합니다. – Joe

+0

WMI가 내 투표를 너무 많이받습니다. :) – Cocowalla

0

관리 코드 만 사용하는 방법을 모르겠습니다.

here을 사용하면 GetVersionEx을 사용하여 멋지게 캡슐화해야합니다.

0

나는 그것을 필요로하는 사람들을 위해 더 작은 코드 스 니펫을 추가하기를 원했습니다.

private static string GetOSName() 
    { 
     string result = string.Empty; 
     ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem"); 
     foreach (ManagementObject os in searcher.Get()) 
     { 
      result = os["Caption"].ToString(); 
      break; 
     } 
     return result; 
    }