这是确定操作系统架构的好方法吗?

Posted

技术标签:

【中文标题】这是确定操作系统架构的好方法吗?【英文标题】:Is this a good way to determine OS Architecture? 【发布时间】:2010-09-05 10:58:33 【问题描述】:

由于Windows Vista中WMI类Win32_OperatingSystem只包含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 或其他东西。

【问题讨论】:

【参考方案1】:

看看 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,是的,它是一个更冗长的但它被记录和确定。

【讨论】:

【参考方案2】:

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

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

编辑:@Edit:是的。 :)

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于这是确定操作系统架构的好方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

ELK 的好架构是啥?

这个几个开源项目,你确定不看看吗?

[架构之路-98]:《软件架构设计:程序员向架构师转型必备》-8-确定关键性需求与决定系统架构的因素

JVM整体架构,你了解吗

[架构之路-99]:《软件架构设计:程序员向架构师转型必备》-9-确定关键性需求与决定系统架构的因素

系统架构师(java)和大数据架构师