这是确定操作系统架构的好方法吗?
由于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或其他东西。
看看雷蒙德陈氏解决方案:
How to detect programmatically whether you are running on 64-bit Windows
和这里的PInvoke的为.NET:
更新:我会再跟检查“86”。谁在说什么英特尔或AMD的下一个32位处理器可能被指定为。概率很低,但这是一个风险。您应该要求操作系统通过正确的API来确定这一点,而不是通过查询可能被认为对外界不透明的操作系统版本/平台特定值是什么。问问你自己的问题,1 - 注册表条目是否由MS正确记录,2 - 如果它是确实提供可能值的确定列表,保证允许你作为开发者在你是否正在运行之间做出明智的决定32位或64位。如果答案是否定的,那么调用API的,是的,但它是一个更长的啰嗦,但它是记录和权威。
只要您确定应用程序的用户将始终能够访问您所需的内容,查看注册表是完全有效的。
在.NET下测试64位的最简单方法是检查IntPtr.Size的值。
编辑:Doh!这会告诉你当前进程是否是64位的,而不是整个操作系统。抱歉!
在.NET下测试64位的最简单方法是检查IntPtr.Size的值。
我相信IntPtr.Size的值是4对于在WOW下运行的32位应用程序,不是吗?
编辑:@编辑:是的。 :)