(C#)检测Windows操作系统的类型(非本地化)

时间:2013-03-19 07:37:02

标签: c# windows

我需要检测安装了哪种类型的Windows操作系统( edition )。按类型我的意思是,例如:“Home”,“Enterprise”或“Professional”。请不要问为什么(我已经与需求向导进行了艰难的斗争)。

现在的问题是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;
        }
}

任何人都知道如何做到这一点不会遇到本地化问题?

3 个答案:

答案 0 :(得分:0)

在Codeproject上是一篇很好的文章(用dll)来做到这一点:

Getting Operating System Version Info - Even for Windows 8!

他得到了他的奶酪:

Determine Windows Version and Edition with C#

答案 1 :(得分:0)

请参阅Win32_OperatingSystem课程中的OperatingSystemSKU属性,这是基于uint的枚举。

答案 2 :(得分:0)

您可以P / Invoke GetProductInfo本机API。 C#can be found here

中的用法和示例

虽然它仅支持Vista及以上版本。

以下是an example它在C ++中的完成方式,可以很容易地进行P / Invoked

对于XP,我认为没有办法以非本地化的方式获取此信息。