Visual Studio 2005 编译的版本无法启动,出现应用程序配置不正确的错误
2014-08-03 11:05
357 查看
原帖来自:http://www.zzzj.com/html/20080829/64942.html
这个问题最终的解决方法是修改manifest文件,首先需要关闭MSVC project中的embed manifest的选项,然后修改manifest文件。
修改前的manifest文件:
修改后的manifest文件:
把最后的8.0.50727.6195版本的依赖删掉了。经实测:修改后可以在winxp和windows 8.1上运行。估计根本原因是因为这个程序引用到一些三方的DLL,而这些DLL的编译版本跟我这边所用的2005不一样(可能是很老的6.0)。不过就像原帖所说的,已经无法验证了。
附上原帖内容:
在网上找出了这些方法:
方法一:
在类似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了。
方法三:
工程-》属性-》配置属性-》常规-》MFC的使用,选择“在静态库中使用mfc”
这样生成的exe文件应该就可以在其他机器上跑了。
方法四:
你的vc8安装盘上找到再分发包vcredist_xxx.exe和你的程序捆绑安装
在大部分机上都可以运行了,唯独在我的测试机上还是报应用程序配置错误。刚开始怀疑是还缺少dll,在能跑的机上把windows/system32目录下所有的msvc*.dll都复制到这台机的运行目录,还是不行!极度郁闷※×…!后来实在没辙了,就在VC环境中打开了EXE来查看它内嵌的manifest资源,无奈了看了一会,带着心中对manifest的咒骂,突然发现这个manifest带了两个版本CRT的依赖:
<assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50727.762'。。。
<assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0''。。。
再打开Microsoft.VC80.CRT.manifest一看,是这样:
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762"
就是说,我们EXE的Manifest里多了一个版本依赖,那就把后面那个依赖删除试试。于是就把工程设置的生成manifest的选项去掉,手工改了一下manifest放到程序目录下,发现果然可以运行了!
还有个问题没有明白,就是VC为什么在自动生成的manifest里带了两个依赖呢,上网再查了一下,发现在msdnonline上说'8.0.50608.0'这个版本是在XP下用的,'8.0.50727.762'这个版本是在Vista下用的(http://msdn.microsoft.com/en-us/library/ms235342(VS.80).aspx),可是我用的是'8.0.50727.762'在XP下运行的好好的!想不通是它错了还是别的原因。后来在CRT的源码里面搜索'8.0.50727.762',找到了~'8.0.50608.0'也在那里。
#if defined _USE_RTM_VERSION
#define _CRT_ASSEMBLY_VERSION “8.0.50608.0”
#else
#define _CRT_ASSEMBLY_VERSION “8.0.50727.762”
#endif
显然默认的版本是“8.0.50727.762”,除非定义了_USE_RTM_VERSION!那为什么我们的工程会生成两个版本的依赖呢,明明这个地方是二选一的。一开始怀疑是工程设置引起的,我就把我们的工程拷出来,把里面的文件删掉,再复制一些向导生成的文件进来,编译一看,manifest里只有一个'8.0.50727.762',说明工程设置没有问题!最后我怀疑是工程链接的那些库的问题,因为有些库是用VC6或者VC2003编译的,但是有些库没有代码,编不了,没法尝试了。
这个问题最终的解决方法是修改manifest文件,首先需要关闭MSVC project中的embed manifest的选项,然后修改manifest文件。
修改前的manifest文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> </dependentAssembly> </dependency> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC80.MFC" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> </dependentAssembly> </dependency> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity> </dependentAssembly> </dependency> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.6195" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> </dependentAssembly> </dependency> </assembly>
修改后的manifest文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> </dependentAssembly> </dependency> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC80.MFC" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> </dependentAssembly> </dependency> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity> </dependentAssembly> </dependency> </assembly>
把最后的8.0.50727.6195版本的依赖删掉了。经实测:修改后可以在winxp和windows 8.1上运行。估计根本原因是因为这个程序引用到一些三方的DLL,而这些DLL的编译版本跟我这边所用的2005不一样(可能是很老的6.0)。不过就像原帖所说的,已经无法验证了。
附上原帖内容:
在网上找出了这些方法:
方法一:
在类似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了。
方法三:
工程-》属性-》配置属性-》常规-》MFC的使用,选择“在静态库中使用mfc”
这样生成的exe文件应该就可以在其他机器上跑了。
方法四:
你的vc8安装盘上找到再分发包vcredist_xxx.exe和你的程序捆绑安装
在大部分机上都可以运行了,唯独在我的测试机上还是报应用程序配置错误。刚开始怀疑是还缺少dll,在能跑的机上把windows/system32目录下所有的msvc*.dll都复制到这台机的运行目录,还是不行!极度郁闷※×…!后来实在没辙了,就在VC环境中打开了EXE来查看它内嵌的manifest资源,无奈了看了一会,带着心中对manifest的咒骂,突然发现这个manifest带了两个版本CRT的依赖:
<assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50727.762'。。。
<assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0''。。。
再打开Microsoft.VC80.CRT.manifest一看,是这样:
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762"
就是说,我们EXE的Manifest里多了一个版本依赖,那就把后面那个依赖删除试试。于是就把工程设置的生成manifest的选项去掉,手工改了一下manifest放到程序目录下,发现果然可以运行了!
还有个问题没有明白,就是VC为什么在自动生成的manifest里带了两个依赖呢,上网再查了一下,发现在msdnonline上说'8.0.50608.0'这个版本是在XP下用的,'8.0.50727.762'这个版本是在Vista下用的(http://msdn.microsoft.com/en-us/library/ms235342(VS.80).aspx),可是我用的是'8.0.50727.762'在XP下运行的好好的!想不通是它错了还是别的原因。后来在CRT的源码里面搜索'8.0.50727.762',找到了~'8.0.50608.0'也在那里。
#if defined _USE_RTM_VERSION
#define _CRT_ASSEMBLY_VERSION “8.0.50608.0”
#else
#define _CRT_ASSEMBLY_VERSION “8.0.50727.762”
#endif
显然默认的版本是“8.0.50727.762”,除非定义了_USE_RTM_VERSION!那为什么我们的工程会生成两个版本的依赖呢,明明这个地方是二选一的。一开始怀疑是工程设置引起的,我就把我们的工程拷出来,把里面的文件删掉,再复制一些向导生成的文件进来,编译一看,manifest里只有一个'8.0.50727.762',说明工程设置没有问题!最后我怀疑是工程链接的那些库的问题,因为有些库是用VC6或者VC2003编译的,但是有些库没有代码,编不了,没法尝试了。
相关文章推荐
- Visual Studio 2005 编译的版本无法启动,出现应用程序配置不正确的错误
- Resource Hacker+mysql安装会出现错误“应用程序无法启动因为应用程序的并行配置不正确”
- vs2008在打了SP1补丁后编译版本不匹配,导致“应用程序配置不正确,应用程序未能启动
- VS 2005出现 此应用程序无法启动 的错误
- 启动SQL Server 2005 配置管理器时,出现以下提示错误,无法连接到WMI提供程序。您没有权限或者该服务器无法访问
- 解决VS在Release下编译程序报“应用程序无法启动,应用程序的并行配置不正确”的问题
- vs2005调试时出现“无法启动程序”......由于应用程序配置不正确....
- 程序出现了异常:应用程序无法启动,因为应用程序的并行配置不正确
- VC2005程序的一个运行错误 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。
- 运行错误:应用程序无法启动因为并行配置不正确。the application has failed to start because its side-by-side configuration is incorrect 解决方法
- 启动腾讯软件出现“应用程序无法启动并行配置不正确”解决
- VC++ 2005编译出程序出现“应用程序配置错误”的解决方法
- 转载VS2008 编译出来的exe文件,运行遇到“应用程序配置不正确,程序无法启动”的问题
- 【绿色版软件】出现应用程序无法启动,并行配置不正确
- VC2005程序的一个运行错误 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。
- 解决VC2005程序的一个运行错误“由于应用程序的配置不正确,应用程序未能启动"
- 【IDE-Visual Studio】无法启动程序“xxx.exe”。由于应用程序配置不正确,未能启动此应用程序。
- Windows7出现:应用程序无法启动,因为应用程序的并行配置不正确
- PZISP自动下载软件运行时出现“应用程序无法启动,因为应用程序的并行配置不正确”
- vc2013 时错误 应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件 日志,或使用命令行 sxstrace.exe 工具。