这是确定OS体系结构的好方法吗?
时间:2020-03-05 18:38:08 来源:igfitidea点击:
由于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 Chens的解决方案:
如何以编程方式检测我们是否在64位Windows上运行
这是.NET的PINVOKE:
IsWow64Process(内核32)
更新:我会在检查" x86"时遇到问题。谁说英特尔或者AMD的下一个32位处理器可以指定为。可能性低,但是有风险。我们应该要求操作系统通过正确的API来确定,而不是通过查询可能是外界不透明的操作系统版本/平台特定值来确定。问自己一个问题,1是MS正确记录了相关的注册表项,2是的,它们提供了可能的确定值列表,可以保证让我们作为开发人员在是否运行32位之间做出明智的决定。或者64位。如果答案是否定的,则调用API,是的,但是缠绵得比较长,但是有据可查且确定。
回答
在.NET下测试64位的最简单方法是检查IntPtr.Size的值。
编辑:Doh!这将告诉我们当前进程是否为64位,而不是整个操作系统。对不起!
回答
The easiest way to test for 64-bit under .NET is to check the value of IntPtr.Size.
我相信在WOW下运行的32位应用程序的IntPtr.Size的值为4,不是吗?
编辑:@编辑:是的。 :)