在Windows XP上运行32位程序

时间:2013-12-18 14:02:26

标签: delphi 32bit-64bit wow64

我有Rad Studio XE3的问题:我的程序(32位)经常在我的机器上运行(Windows 7-64位),但是当我尝试在“xp mode”上运行可执行文件时出现以下错误消息:“无法在KERNEL32.dll库中找到Wow64RevertWow64FsRedirection的入口点”。

我必须在32位计算机上运行它,安装xp。

提前致谢。

2 个答案:

答案 0 :(得分:3)

WOW64文件系统重定向仅在WOW64下运行时才有意义。因此,该函数仅适用于在64位系统上运行的32位进程,即WOW64。该函数如果可用于64位进程,但总是失败(返回FALSE)。并且该功能在32位系统上不可用。

因此,如果希望程序在32位操作系统上运行,则不得对该函数使用加载时链接。如果你从64位进程调用它,你必须期望它失败。

如果要禁用文件系统重定向,则应该:

  1. 使用运行时链接。这是通过调用GetModuleHandle('kernel32')GetProcAddress()
  2. 添加代码以处理GetProcAddress()可能返回NULL的事实。在那种情况下,您只需跳过禁用文件系统重定向的调用。
  3. 如果您的进程为64位,则跳过调用以禁用文件系统重定向,因为它们始终会失败。

  4. 现在,很少有情况下禁用文件系统重定向是合适的。一般来说,根据我的经验,如果开发人员足够精明地认识到这种情况,那么他们也足够精明来处理我上面列出的三点。所以,我觉得你的代码根本不应该禁用文件系统重定向似乎是合理的。我想知道是否有更好的解决方案可以解决导致您禁用文件系统重定向的问题

答案 1 :(得分:2)

Wow64RevertWow64FsRedirection功能仅在Win64系统上可用。

  

受支持的最低客户端       Windows Vista,Windows XP Professional x64 Edition [仅限桌面应用程序]

这不是Delphi RTL或VCL中任何地方使用的东西,所以它是您的代码(或您正在使用的第三方组件或库)正在做的事情。

您需要删除它(以及任何其他64位功能)才能使您的应用程序与32位版本的Windows兼容。