2013-03-19 78 views
0

我需要檢測安裝Windows操作系統的類型(版本)。按類型我的意思是,例如:「家」,「企業」或「專業」。請不要問爲什麼(我已經與需求嚮導進行了艱難的鬥爭)。(C#)檢測Windows操作系統的類型(非本地化)

現在問題是Windows類型似乎是本地化的,我需要一種方法在switch語句中使用它們來執行不同的行爲。

現在我這樣做:

_os = (from x in new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get().OfType<ManagementObject>() 
     select x.GetPropertyValue("Caption")).First().ToString().Trim(); 
switch (_os) 
{ 
    case "Microsoft Windows XP Professional": 
     { 
      // Do professional stuff... 
      break; 
     } 
    case "Microsoft Windows 7 Professional": 
    case "Microsoft Windows 7 Ultimate": 
    case "Microsoft Windows 7 Enterprise": 
     { 
      // Do ultimate enterprisey professional stuff 
      break; 
     } 
    default: 
     { 
      // File not found 
      break; 
     } 
} 

任何人都知道如何做才能不碰到本地化的問題?

+0

你看這裏嗎? http://www.codeproject.com/Articles/73000/Getting-Operating-System-Version-Info-Even-for-Win – 2013-03-19 07:38:42

+0

我想說這不是一個確切的副本(雖然我*有*錯過了這個問題),因爲那裏的答案包括獲得價值 - 但它可能是本地化的,我想避免這個問題,這是我關注這個問題的焦點。 – 2013-03-19 08:45:34

回答

0

Win32_OperatingSystemOperatingSystemSKU屬性,此是基於uint的枚舉。

+0

這很好,但在Windows XP上不起作用。 – 2013-03-19 08:46:18

+0

@AmadeusHein:對於XP,請參閱'OSProductSuite'屬性。 – Dennis 2013-03-19 08:49:29

0

您可以P /調用GetProductInfo原生API。 C#中的用法和示例#can be found here

儘管它僅支持Vista和更高版本。

下面是其在C++中,可以很容易P /調用

對於XP,我不認爲有什麼辦法讓一個非本地化的方式恐怕這個信息怎麼做an example