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

4 回答 4

8

看看 Raymond Chens 的解决方案:

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

这是 .NET 的 PINVOKE:

IsWow64Process (kernel32)

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

于 2008-08-06T19:49:35.727 回答
2

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

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

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

于 2008-08-06T20:07:33.587 回答
1

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

于 2008-08-06T19:48:05.153 回答
1

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

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

于 2008-08-06T20:01:58.450 回答