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

标签 c# windows registry

由于 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 的解决方案:

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

关于c# - 这是确定操作系统架构的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3903/

相关文章:

windows - 创建批处理脚本以在没有其他压缩工具的情况下解压缩文件

c++ - Windows 中用于生物特征身份验证的凭据提供程序

powershell - REG_BINARY 到 PowerShell 中的 Windows 键

registry - 如何从注册表项中删除注册表值和键

c# - 为什么 ViewModelLocator 成员不是静态的

c# - 在没有 BuildServiceProvider() 的情况下在 AddOpenIdConnect 中获取 ServiceProvider

c# - 编译中的声明捕获阶段

c# - MySQL - 提取表中存在但另一个表中不存在的记录

windows - 如何在 Windows 中使用 Sphinx 创建 PDF 文档

c++ - 使用 C++ 在 Windows 寄存器中插入值