2013-03-19 91 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