这是确定OS体系结构的好方法吗?

时间:2020-03-05 18:38:08  来源:igfitidea点击:

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

解决方案

回答

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

回答

看看Raymond Chens的解决方案:

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

这是.NET的PINVOKE:

IsWow64Process(内核32)

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

回答

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

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

回答

The easiest way to test for 64-bit under .NET is to check the value of IntPtr.Size.

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

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