2009-10-28 59 views
0

確定安裝的Windows Edition System.Environment.OSVersion似乎並未指明安裝了哪個版本的Windows 2003(Standard,Enterprise,DataCenter)。如何使用.net

有什麼方法可以使用託管代碼訪問這些信息嗎?

我知道我可以使用P/Invoke調用GetVersionEx並檢查OSVERSIONINFOEX.wSuiteMask以獲取此信息,但我正在尋找更簡單的解決方案。

更新

使用WMI看起來像的路要走,雖然Win32_OperatingSystem的OSProductSuite財產看起來比Name屬性更可靠。以下是示例代碼:

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方式似乎很簡單。 – leppie 2009-10-28 11:38:56

回答

4

你可以執行以下WMI查詢:

SELECT名字從Win32_OperatingSystem

它返回是這樣的:

的Microsoft Windows Server 2003標準版| C:\ WINDOWS | \設備\ Harddisk0上\ Partition1

This article解釋瞭如何使用.NET執行WMI查詢。

+0

請試試這個,謝謝 – Joe 2009-10-28 16:05:21

+0

WMI也收到我的投票:) – Cocowalla 2009-10-28 19:36:17

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; 
    }