0

我需要检测安装了什么类型(版本)的 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;
        }
}

任何人都知道如何做到这一点,以免遇到本地化问题?

4

3 回答 3

0

您可以 P/Invoke GetProductInfo本机 API。C# 中的用法和示例可以在这里找到

虽然它仅在 Vista 及更高版本中受支持。

这是一个如何在 C++ 中完成的示例,可以很容易地 P/Invoked

对于 XP,恐怕没有任何方法可以以非本地化的方式获取此信息。

于 2013-03-19T07:43:50.890 回答
0

在 Codeproject 上有一篇不错的文章(带有 dll)来做到这一点:

获取操作系统版本信息 - 即使是 Windows 8!

他的奶酪来自:

使用 C# 确定 Windows 版本和版本

于 2013-03-19T07:40:45.200 回答
0

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

于 2013-03-19T07:42:44.970 回答