【问题标题】:How to detect 32/64 platform?如何检测 32/64 平台?
【发布时间】:2015-05-18 10:34:00
【问题描述】:

我需要检测应用程序是否在 Win32/64 上运行。

更新:People 报告说依赖 [HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0] 密钥不是一个好主意。

【问题讨论】:

  • 该代码非常粗糙。 LoadLibrary 返回一个 HMODULEGetModuleHandle('kernel32') 会比 LoadLibrary 更好。狡猾地使用@vIsWow64 的毫无意义的初始化。似乎很难相信 IsWow64Process 会在 32 位操作系统上返回 True
  • @TLama 问题中的代码调用IsWow64Process。它不仅仅检测函数是否被导出。
  • @Altar 我无法复制。在我的 32 位 xp 系统上,您的函数带有褶皱,返回 false。请注意,我添加了诊断以证明它已到达对 IsWow64Process 的调用并且该调用成功(返回 true)。我很难相信IsWow64Process 不起作用。
  • 主要是我希望您在继续编写代码之前注意TOSVersion.Architecture。您可以删除问题中的代码,然后使用TOSVersion.Architecture
  • @user246408 Serg,你关闭这个的骗子询问 D2007,而不是排除 TOSVersion 的答案。这里的问题是 XE7。

标签: delphi 32bit-64bit delphi-xe7


【解决方案1】:

您在问题中提供的代码有一些皱纹,但它确实可以正常工作。我怀疑您实际上并没有运行该代码,而是出错并以某种方式发布了错误的代码。

FWIW,您应该使用System.SysUtils 中的TOSVersion 来检查底层平台的位数。 TOSVersion.Architecture 属性会告诉您底层平台是 32 位还是 64 位。

【讨论】:

  • 鉴于GetVersionEx 的谎言,即使现在这也很难!尽管如此,TOSVersion 确实为您提供了版本号和名称,所以我想它在那里是一个好方法,以 GetVersionEx 为模。
猜你喜欢
  • 2010-09-25
  • 2011-04-06
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
相关资源
最近更新 更多