3

我最近从一个使用 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,我的程序将不再工作。

4

2 回答 2

2

使用正常工作的 InstallShield 项目和不工作的 Inno 项目,我能够确定真正的罪魁祸首是未注册的 msxml4.dll。我收到的错误并没有给出这个结果的真正线索,但我最终到达了那里......

regsvr32 msxml4.dll
于 2013-01-29T12:26:04.740 回答
2

我相信你已经阅读了这篇博客。总之,您需要使用 7.1 SDK,并且您需要在链接器选项中将所需的最低版本设置为 5.01。

于 2013-01-28T22:08:23.813 回答