由于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或其他东西。
答案 0 :(得分:6)
看看Raymond Chens解决方案:
How to detect programmatically whether you are running on 64-bit Windows
这是针对.NET的PINVOKE:
更新:我在检查'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位,而不是整个操作系统。遗憾!