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

时间:2008-08-06 19:42:00

标签: c# windows registry

由于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 个答案:

答案 0 :(得分:6)

看看Raymond Chens解决方案:

How to detect programmatically whether you are running on 64-bit Windows

这是针对.NET的PINVOKE:

IsWow64Process (kernel32)

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

答案 1 :(得分:2)

  

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

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

编辑:@Edit:是的。 :)

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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