这是确定操作系统架构的好方法吗?

22

由于 WMI 类 Win32_OperatingSystem 只在 Windows Vista 中包含 OSArchitecture,因此我快速编写了一种使用注册表的方法来尝试确定当前系统是 32 位还是 64 位系统。

private Boolean is64BitOperatingSystem()
{
    RegistryKey localEnvironment = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment");
    String processorArchitecture = (String) localEnvironment.GetValue("PROCESSOR_ARCHITECTURE");

    if (processorArchitecture.Equals("x86")) {
        return false;
    }
    else {
        return true;
    }
}

到目前为止,这对我们来说已经运作得相当不错了,但我不确定我有多喜欢查找注册表。这是一种相当标准的做法还是有更好的方法?

编辑:哇,那段代码在预览中看起来漂亮多了。下次我会考虑链接到pastebin或其他地方。

4个回答

8

看一下雷蒙德·陈的解决方案:

如何以编程方式检测是否在64位Windows上运行

这是.NET的PINVOKE:

IsWow64Process (kernel32)

更新:我对检查“x86”表示异议。谁能说出英特尔或AMD的下一个32位处理器可能被指定为什么。概率很低,但这是一个风险。您应该通过正确的API询问操作系统来确定此事,而不是查询可能被视为对外部世界不透明的OS版本/平台特定值。问自己以下问题:1- MS是否正确记录了注册表项,2-如果是,他们是否提供了一个明确的可能值列表,保证允许您作为开发人员做出知情决策,判断您是否正在运行32位还是64位。如果答案是否定的,则调用API,是的,它会更加冗长,但它是有文档和明确的。


2

在.NET下测试64位的最简单方法是检查IntPtr.Size的值。

我相信在WOW下运行的32位应用程序,IntPtr.Size的值为4,对吗?

编辑: @Edit: 是的。 :)


1

查看注册表是完全有效的,只要您可以确保应用程序的用户始终可以访问您所需的内容。


1

在.NET下测试64位的最简单方法是检查IntPtr.Size的值。

编辑:糟糕!这只会告诉您当前进程是否为64位,而不是整个操作系统。抱歉!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接