由于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 Chen的解决方案:

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

这是 .NET 的 PINVOKE:

IsWow64Process(kernel32)

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

其他提示

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

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top