【原】解决VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题...
VC9编译的程序在没有装过VC9(确切的说是.Net Framework3.5)的机器上运行时,如果提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”这个错误,那么就说明该程序动态链接了VC9的运行时库,(如果还用到了MFC,那么可能动态链接了VC9的MFC库,同理还有ATL库),以及缺少对应的manifest文件,程序在目标机器上没有找到这些库和配置文件,因此导致了这个错误。出现这种情况的VC9编译器可能存在多个版本,接下来分别阐明:
1、没有打过任何补丁的VS2008
该版本对应的CRT/MFC/ATL库的版本号为9.0.21022.8,这个版本号在后面会用到。这个版本的程序部署比较简单,直接把VC安装目录下的redist目录(C:\Program Files\Microsoft Visual Studio 9.0\VC\redist)中需要的库以及对应的manifest文件拷贝到执行程序同目录下,这样程序到任何机器上都能够正常运行了。
2、打过SP1补丁的VS2008
打过该补丁后,系统中存在着两个版本的CRT/MFC/ATL库,版本号分别为9.0.21022.8和9.0.30729.1,这导致了manifest文件中记录的版本号和实际库的版本号不一致(程序要求它们的版本号一致才能运行)。这个版本的程序部署需要两个步骤,首先要使manifest文件中依赖项的版本号与实际库的版本号一致,均为9.0.30729.1,方法是在工程设置中增加一个宏定义_BIND_TO_CURRENT_VCLIBS_VERSION,该宏定义于C:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtassem.h文件中,然后重新编译程序。接下来还是将VC安装目录下的redist目录(C:\Program Files\Microsoft Visual Studio 9.0\VC\redist)中需要的库以及对应的manifest文件拷贝到执行程序同目录下,然后修改manifest文件中依赖项的版本号为9.0.21022.8,这样使得程序误以为该目录下库的版本号为9.0.21022.8(实际上是9.0.30729.1版本),这样程序到任何机器上都能够正常运行了。
3、打过SP1补丁与SP1 ATL 安全更新 (KB973675)的VS2008
在SP1补丁之后,微软又于近日发布了一个用于智能设备的 Microsoft Visual Studio 2008 Service Pack 1 ATL 安全更新 (KB973675), 该补丁又将CRT/MFC/ATL库的版本号升级,为9.0.30729.4148,这次升级比较好,manifest文件与库的版本号一致了,不像SP1一样升级的不彻底。这样只需要在工程设置中增加一个宏定义_BIND_TO_CURRENT_VCLIBS_VERSION,接下来重新编译程序,然后直接把VC安装目录下的redist目录中需要的库以及对应的manifest文件拷贝到执行程序同目录下,这样程序到任何机器上都能够正常运行了。
4、继3之后又打过SP1安全更新(KB2465361)与SP1 Redistributable Package 的安全更新 (KB2467174)的VS2008
这是最新的更新(2011/4/12)。微软于近日针对VS2005/VS2008/VS2010发布了一套用于修复MFC安全漏洞的补丁,对应VS2008的补丁是Microsoft Visual C++ 2008 Service Pack 1 Redistributable Package 的安全更新 (KB2467174)和Microsoft Visual Studio 2008 Service Pack 1 安全更新 (KB2465361),这样CRT/MFC/ATL库的版本号又升级为9.0.30729.55710。修复方法同第3点。
需要注意的是,安装完补丁后需要rebuild工程,不要忘了先rebuild工程所依赖的lib/dll工程。build完成后可以到中间文件目录(一般是Debug/Release)打开xxx.exe.intermediate.manifest或xxx.dll.intermediate.manifest文件(xxx是你的工程名)查看程序所依赖的CRT/MFC/ATL库的版本号是否是最新的或你期望的,如果出现依赖同一个库的两个版本的情况,那么就说明该工程依赖的某个lib或dll工程还没有重编或没有增加_BIND_TO_CURRENT_VCLIBS_VERSION宏定义;如果同一个库只依赖一个版本,并且该版本号正确,那么恭喜你,你的程序肯定能够运行在所有机器上。
顺便提一下,如果不想在发布程序时带上这些库和manifest文件(如果没有必要的话),那么可以采用静态编译CRT和MFC,然后把manifest文件添加到资源中,这样编译出的程序只要一个exe就可以在任何机器上直接运行了。
参考文章:
1、“应用程序配置不正确,程序无法启动”的解决方法资料收集:http://hi.baidu.com/fairysky/blog/item/e7a8366dbaa735f3431694c8.html
转载于:https://www.cnblogs.com/wondering/archive/2009/08/29/vs2008_deploy_problem.html
【原】解决VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题...相关推荐
- “应用程序配置不正确,程序无法启动”的解决方法资料收集
http://hi.baidu.com/fairysky/blog/item/e7a8366dbaa735f3431694c8.html 先鄙视一下百度空间的编辑器,实在是太差了,在word编辑的东西 ...
- [转]VS2015编译的程序在其他机器上缺少msvcp120.dll
http://www.lai18.com/content/1159618.html 1. 今天分享一个自己在开发过程中遇到的困难. 用VS2015开发了一个windows客户端(win32项目),在自 ...
- 成功解决VS编译环境下C++语言出现的异常提示:烫烫烫烫烫烫烫烫烫烫
成功解决VS编译环境下C++语言出现的异常提示:烫烫烫烫烫烫烫烫烫烫 目录 解决问题 解决方法 解决问题 解决方法 "烫"常出现在Windows环境下,执行越界访问的程序,会打印出 ...
- Qt5.5-msvc2013-x64编译的程序在其它机器上无法运行,提示0xc000007b错误
问题描述:在win7系统上,使用Qt5.5+msvc2013-x64编译的程序在其它机器上无法运行,提示0xc000007b错误. 解决过程: 在网上查看解决方案,一度受到误导,看到大量的说需要安装D ...
- 解决应用程序配置不正确,程序无法启动
在使用 VC++2005环境下生成的程序,放置到未安装VC环境的机器下后,有时候会出现程序无法执行的错误,其提示是:应用程序配置不正确,程序无法启动,重新安装应用程序可能解决问题. 实际上,重装是解决 ...
- VS2005 解决应用程序配置不正确,程序无法启动问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 什么是RSS ...
- 让VC编译的Release版本程序在其他机器上顺利运行
让VC编译的Release版本程序在其他机器上顺利运行 Posted on 2011-07-29 15:06 单鱼游弋 阅读(939) 评论(0) 编辑 收藏 链接的时候分静态链接和动态链接两种. 静 ...
- VS2005 解决应用程序配置不正确,程序无法启动问题(小问题,大思想)
最近使用VS2005+codejock开发,需要做一个Release版本.当我把必要的mfc库,拷贝到exe目录下时.exe还是不能启动. 经过网上查找,看到一篇文章."解决"应用 ...
- 解决“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”
今天遇到几次打开dreamweaver cs3时显示"由于应用程序配置不正确,应用程序未能启动.重新安装应用程序可能会纠正这个问题",网上搜了一下.终于找到答案.遇到同样问题的朋友 ...
最新文章
- 虚拟机VMware14安装kali-linux-2019.1-amd64
- 想学图像分割,强烈建议从这5篇图像分割算法综述
- C1 FlexGrid 行Style设置问题
- 重温WCF之会话Session(九)
- WINDOWS系统文件讲解
- 计算机科学825,2017年河南大学计算机与信息工程学院825专业基础课(软件工程导论、数据结构)之数据结构考研题库...
- python故事_python的故事
- mysql执行语句返回主键_mysql语句insert后返回主键
- elasticsearch报错org.elasticsearch.discovery.MasterNotDiscoveredException: null
- mysql 10106_mysql出现:Can’t create TCP/IP socket (10106) (#2004)
- LZW压缩(解压缩)算法详解及源码
- office2007在ppt中插入文件对象(可以单击打开)
- 浅谈快速开发平台:突破系统开发边界,赋能企业数字化!
- 还在寻找一款DVD全能转换器吗?WinX DVD Ripper for Mac它不香吗?
- FPGA数字信号处理(25)数字相关器设计(经典结构)
- 计算机机房管理系统 数据库课设,学校机房管理系统数据库课程设计.doc
- 影视剪辑,如何一个人自学短视频7天vlog教程
- 【记录】IOS手机如何配置whistle代理进行抓包?(苹果系列)(安卓应该也是类似处理)
- 【Axure教程】随机抽奖原型
- 电脑和手机实现网页互相切换
热门文章
- ae可围绕帧拖动放大插件:Drag Zoom Pro for AE mac(兼容M1)
- M1芯片MacBook Pro/Air能兼容哪些软件?M1 mac软件兼容一览表
- java 比较源文件_Beyond Compare比较Java源代码文件的操作流程
- 1168:大整数加法--2022.01.22 AC
- 1.7 编程基础之字符串 16 忽略大小写的字符串比较 python
- P3383 【模板】线性筛素数
- python读取txt文件存储数组_python : 将txt文件中的数据读为numpy数组或列表
- python pca降维_机器学习之sklearn中的降维算法
- postMessage跨域、跨iframe窗口消息传递
- Java笔记-使用System.gc()进行内存回收