2008-08-06 67 views
15

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

回答

6

看看雷蒙德陈氏解决方案:

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

和这里的PInvoke的为.NET:

IsWow64Process (kernel32)

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

1

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

1

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

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

2

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

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

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