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

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

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

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


查看关于使用 P/Invoke 获取处理器体系结构的答案。https://dev59.com/DnRA5IYBdhLWcg3w9izq - Ron Beyer
我怀疑这不是一个真正的问题,它只是在你的机器上出了问题。从商店下载应用程序的任何人都会自动获得适当的版本。 - Hans Passant
@HansPassant 不对。想象一下你有一台带有64位Atom和Windows 8.1 32位的平板电脑。商店会给你一个X86版本,但PlayReady不会为你工作。 - Igor Kulman
嗯,不,Windows 8.1 32位没有64位版本的PlayReady。 - Hans Passant
1个回答

2
您可以在 Windows Store 应用程序中使用 P/Invoke Win32 的 GetNativeSystemInfo(有关 P/Invoke 签名的更多信息,请单击此处);它返回一个包括处理器架构的结构。
我找不到关于在 x64 机器上运行 x86 Windows 的情况下它会返回什么样的信息,并且我手头没有这样的机器来进行测试,但值得一试。

这并不是针对问题的答案。如果你想评述或请求作者澄清问题,请在他们的帖子下留言。 - Hamid Pourjam
@dotctor:我编辑了帖子,以使答案更加明确。 - Solal Pirelli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接