现象 用VS2005编译的程序部署到某些系统(XP、Win2003)中常会遇到#1“ 应用程序配置不正确,程序无法启动,重新安装应用程序可能会修复问题。”或者#2“没有找到MSVCR80.DLL,因此这个应用程序未能启动。重新安装应用程序可能会修复问题。”或者当复制MSVCR80.DLL到应用目录后提示#3“R6034”。 原因 Visual C++ Libraries as Shared Side-by-Side Assemblies (大意如下) vs2005在XP、2003开发模式支持shared SxS,用到ATL, MFC, Standard C++, CRT库的应用需要邦定(清单)manifest才能正确加载相应DLL。如果应用程序在这些系统下未邦定清单,即使将这些库放到应用本地也不会正确加载(#3)。在Windows 98/2000下,由于不支持该模式,加载时采用默认的方式加载DLL,也就不会出现上述问题。 解决 1.应用程序嵌入清单文件 Visual Studio 中的清单生成(大意如下) 1)“项目属性”对话中,在“配置属性”选项卡上,单击“链接器”,再单击“清单文件”,然后单击“生成清单 ”。 2)“项目属性”对话中,打开“清单工具”节点,然后选择“输入和输出”的“嵌入清单”选择“是”。 2.当应用程序依赖于ATL、MFC、CRT等时,将相应DLL连同清单文件一同打包发布。 将下面目录下的相应文件一同打包发布 Release: D:\Program Files\Microsoft Visual Studio 8\VC\redist\x86 Debug: D:\Program Files\Microsoft Visual Studio 8\VC\redist\Debug_NonRedist\x86 如将MFC是“D:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.MFC”目录下的Microsoft.VC80.MFC.manifest和mfc80.dll PS:点击相关链接获取详细信息。如有误导及自误,欢迎指正。 进一步参考:命令行上的清单生成 |
|