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

Translate

由于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或其他东西。

This question and all comments follow the "Attribution Required."

所有的回答

Kev
Translate

看一下Raymond Chen的解决方案:

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

这是.NET的PINVOKE:

IsWow64Process(内核32)

更新:我会检查“ x86”问题。谁说英特尔或AMD的下一个32位处理器可以指定为。可能性低,但是有风险。您应该要求操作系统通过正确的API来确定,而不是通过查询可能是外界不透明的操作系统版本/平台特定值来确定。问自己一个问题,1-MS是否正确记录了相关的注册表项,2-如果是,它们提供了可能的确定值列表,可以保证您作为开发人员在运行与否之间做出明智的决定。 32位或64位。如果答案是否定的,则调用API,是的,但是绕了很长时间,但是它是有记录的并且是确定的。

来源
Translate

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

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

编辑:@编辑:是的。 :)

来源
Translate

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

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

来源
Translate

只要可以确保应用程序的用户将始终可以访问所需的内容,就可以对注册表进行检查是完全有效的。

来源