我最近从一个使用 MFC 库的 VS2005 项目中获得了源代码。首先,我将项目升级到 VS2012,现在我可以在 Windows 8 上成功构建和运行该软件。接下来,我想在 Windows XP 机器上部署该软件。
我已将平台工具集设置为构建到 Windows XP(使用 v110_xp 选项),并在目标计算机上安装了“Visual C++ Redistributable for Visual Studio 2012 Update 1”。当我运行该软件时,似乎什么也没有发生。通过一些日志记录函数,我可以确定对 LoadFrame(IDR_MAINFRAME) 的调用会导致 kernel32.dll 中的异常。由于 VS2012 中不提供 Windows XP 上的远程调试,因此我无法进一步调试 LoadFrame。
任何想法可能出了什么问题?Visual C++ Redistributable 包是要安装在目标机器上的正确版本吗?接下来我应该尝试什么?
更新
我的项目已经设置为使用 7.1 SDK,并且在链接器选项中将最低要求的版本设置为 5.01。
如果我使用 InstallShield 生成安装程序并包含 MFC、CRT 和 ATL 可再发行组件,则安装程序可以正常工作,并且我的程序现在可以在 Windows XP 上运行。我对可再发行组件的理解是它们只是将相关的 dll 复制到 system32 文件夹(或等效文件夹)中?那是对的吗?
但是,如果我只是简单地将文件复制过来,运行 vsredist_x86.exe 或使用 Inno Setup 来安装软件和 dll,我的程序将不再工作。