我们的工程马上就要发布,但是在一个干净的,即没有安装vs2005的xp上运行(利用虚拟机测试)却弹出下面得错误
“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题“
在英文os上:
This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.
考虑到程序的运行环境问题,可能是由于没有安装.netFrameWork.但是后来安装上之后仍然如故。郁闷。。。
在网上找出了这些方法:
方法一:
在类似C:\Program Files\Microsoft Visual Studio 8\VC\redi
st\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列文件:
msvcm80d.dll
msvcp80d.dll
msvcr80d.dll
Microsoft.VC80.DebugCRT.manifest
把这几个文件拷贝到目标机器上,与运行程序同一文件夹或放到system32下,就可以正确运行了。
其他release版、MFC程序什么的都是拷redist下相应文件夹下的文件就可以了,文件夹后都有标识!
方法二:
修改编译选项,将/MD或/MDd 改为 /MT或/MTd,这样就实现了对VC运行时库的静态链接,在运行时就不再需要VC的dll了。
注:MSDN中对于在不同的配置下Link的LIB作了说明:
C Runtime Library:
开关 对应的库 版本
/MD MSVCRT.LIB 多线程DLL的Release版本
/MDd MSVCRTD.LIB 多线程DLL的Debug版本
/MT LIBCMT.LIB 多线程静态链接的Release版本
/MTd LIBCMTD.LIB 多线程静态链接的Debug版本
/clr MSVCMRT.LIB 托管代码和非托管代码混合
/clr:pure MSVCURT.LIB 纯托管代码 
C++ Standard Library:
开关 对应的库 版本
/MD MSVCPRT.LIB 多线程DLL的Release版本
/MDd MSVCPRTD.LIB 多线程DLL的Debug版本
/MT LIBCPMT.LIB 多线程静态链接的Release版本
/MTd LIBCPMTD.LIB 多线程静态链接的Debug版本 
编译器会自动根据编译选项,选择对应的LIB文件。一般情况下这不会出现问题。
然而,在部分情况下,一旦你的程序的各个部分(LIB, OBJ…)并非由相同的编译选项编译出,而Link在一起的话,会出现各种各样的看似很难解决的问题,这类问题主要以重复定义的错误形式存在,通常的解决方法也很简单,就是选择同样的编译选项进行编译之后再Link
方法三:
工程-》属性-》配置属性-》常规-》MFC的使用,选择“在静态库中使用mfc”
这样生成的exe文件应该就可以在其他机器上跑了。
方法四:
安装vcredist_x86.exe

这样四步下来,大部分程序都应该可以运行了,但悲哀的是在我的测试机上还是报应用程序配置错误。无奈。。
后打开vs2005的命令行,运行depends.exe,试图找出程序启动所依赖的dll,结果大失所望,虚拟机上这些dll都有。如此这般令人抓狂。
最后把vs2005安装目录下的所有.manifest文件(可以搜索 *.manifest得到)都考到程序目录下,程序奇迹般的可以运行。
然后实验,删掉冗余的.manifest文件,只需要5个就够了。它们是Microsoft.VC80.ATL.manifest
Microsoft.VC80.CRT.manifest
Microsoft.VC80.DebugCRT.manifest
Microsoft.VC80.DebugMFC.manifest
Microsoft.VC80.MFC.manifest

Posted on 2009-11-10 13:58 micheal's tech 阅读(846) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理