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

===============>>#1 票数:7 已采纳

看看Raymond Chens解决方案:

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

这是针对.NET的PINVOKE:

IsWow64Process(kernel32)

更新:我在检查'x86'时会遇到问题。 谁能说出英特尔或AMD的下一代32位处理器可能被指定为什么。 概率很低但风险很大。 您应该要求操作系统通过正确的API确定这一点,而不是通过查询可能被视为对外界不透明的操作系统版本/平台特定值。 问问自己问题,1 - 是MS正确记录的注册表项,2 - 如果是,它们提供了可能值的确定列表,保证允许您作为开发人员在您是否正在运行之间做出明智的决定32位或64位。 如果答案是否定的,那么请调用API,是的,这是一个但更长的啰嗦,但它是有记录和确定的。

===============>>#2 票数:2

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

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

编辑 :@Edit:是的。 :)

===============>>#3 票数:1

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

===============>>#4 票数:1

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

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

  ask by Jeremy Privett translate from so

未解决问题?本站智能推荐: