我最近获得了一个使用MFC库的VS2005项目的源代码。首先,我将该项目升级到VS2012,并且现在可以在Windows 8上成功构建和运行软件。接下来,我想在Windows XP机器上部署该软件。
我已经将平台工具集设置为构建到Windows XP(使用v110_xp选项),并在目标机器上安装了“Visual Studio 2012 Update 1的Visual C++ Redistributable”。当我运行该软件时,似乎什么也没有发生。通过一些日志记录函数,我可以确定调用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,则我的程序将无法正常工作。
我已经将平台工具集设置为构建到Windows XP(使用v110_xp选项),并在目标机器上安装了“Visual Studio 2012 Update 1的Visual C++ Redistributable”。当我运行该软件时,似乎什么也没有发生。通过一些日志记录函数,我可以确定调用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,则我的程序将无法正常工作。