在通用应用程序(Windows)中检测 CPU 是不是为 64 位

Posted

技术标签:

【中文标题】在通用应用程序(Windows)中检测 CPU 是不是为 64 位【英文标题】:Detecting if CPU is 64bit in Universal App (Windows)在通用应用程序(Windows)中检测 CPU 是否为 64 位 【发布时间】:2015-06-28 14:32:35 【问题描述】:

我有一个使用 PlayReady DRM 保护视频的通用应用。 PlayReady 的问题在于,它只有在应用程序构建架构与 CPU 架构匹配时才有效(例如:ARM 构建在 ARM 上,x64 在 64 位 CPU 上,x86 在 32 位 CPU 上)。这是设计使然(出于某种原因)。

所以问题是,如果用户拥有 64 位 CPU 并运行 32 位操作系统。在这种情况下,他从商店获得了 x86 版本(因为 32 位操作系统),但由于 64 位 CPI 与 X86 版本不匹配,PlayReady 将无法工作。在这种情况下,我想显示一条消息(而不仅仅是无法播放视频)。

我可以轻松检测 x86 构建(通过添加条件符号),但是如何检测 CPU 是否为 64 位?完整的 .NET 中没有像 System.Environment.Is64BitOperatingSystem 这样的东西。

【问题讨论】:

***.com/questions/767613/… 查看使用 P/Invoke 获取处理器架构的答案 我怀疑这是一个真正的问题,它只会在您的机器上出错。从商店下载应用程序的人会自动获得相应的版本。 @HansPassant 不。想象一下,您有一台配备 64 位 Atom 和 32 位 Windows 8.1 的平板电脑。商店会给你一个 X86 内置的,PlayReady 不适合你。 嗯,不,Windows 8.1 32bit 没有 64bit 版本的 PlayReady。 【参考方案1】:

您可以在 Windows 应用商店应用程序中 P/Invoke Win32 的 GetNativeSystemInfo(有关 P/Invoke 签名 here 的更多信息);它返回一个包含处理器架构的结构。 我找不到任何关于它在 x86 Windows on x64 机器场景中返回的信息,而且我手头没有这样的机器来测试它,但值得一试。

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。 @dotctor:我编辑了帖子以使答案更加明确。

以上是关于在通用应用程序(Windows)中检测 CPU 是不是为 64 位的主要内容,如果未能解决你的问题,请参考以下文章

检测 Windows 还是 Linux? [复制]

在通用 Windows 应用程序中获取键盘状态

Windows 通用应用程序的 Windows 应用程序认证工具包测试期间崩溃的原因?

如何在 gcc 中检测 CPU id

检测 Windows 10 系统电源状态

系统在没有开启Hyper-v时通过检测工具检测到的是cpu支持虚拟化,但是在开启并安装后检测到的就不支持了。