——更新于2011/4/19,针对最新的VS2008补丁,VS2005/2010同样适用。

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编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题...相关推荐

  1. “应用程序配置不正确,程序无法启动”的解决方法资料收集

    http://hi.baidu.com/fairysky/blog/item/e7a8366dbaa735f3431694c8.html 先鄙视一下百度空间的编辑器,实在是太差了,在word编辑的东西 ...

  2. [转]VS2015编译的程序在其他机器上缺少msvcp120.dll

    http://www.lai18.com/content/1159618.html 1. 今天分享一个自己在开发过程中遇到的困难. 用VS2015开发了一个windows客户端(win32项目),在自 ...

  3. 成功解决VS编译环境下C++语言出现的异常提示:烫烫烫烫烫烫烫烫烫烫

    成功解决VS编译环境下C++语言出现的异常提示:烫烫烫烫烫烫烫烫烫烫 目录 解决问题 解决方法 解决问题 解决方法 "烫"常出现在Windows环境下,执行越界访问的程序,会打印出 ...

  4. Qt5.5-msvc2013-x64编译的程序在其它机器上无法运行,提示0xc000007b错误

    问题描述:在win7系统上,使用Qt5.5+msvc2013-x64编译的程序在其它机器上无法运行,提示0xc000007b错误. 解决过程: 在网上查看解决方案,一度受到误导,看到大量的说需要安装D ...

  5. 解决应用程序配置不正确,程序无法启动

    在使用 VC++2005环境下生成的程序,放置到未安装VC环境的机器下后,有时候会出现程序无法执行的错误,其提示是:应用程序配置不正确,程序无法启动,重新安装应用程序可能解决问题. 实际上,重装是解决 ...

  6. 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 ...

  7. 让VC编译的Release版本程序在其他机器上顺利运行

    让VC编译的Release版本程序在其他机器上顺利运行 Posted on 2011-07-29 15:06 单鱼游弋 阅读(939) 评论(0) 编辑 收藏 链接的时候分静态链接和动态链接两种. 静 ...

  8. VS2005 解决应用程序配置不正确,程序无法启动问题(小问题,大思想)

    最近使用VS2005+codejock开发,需要做一个Release版本.当我把必要的mfc库,拷贝到exe目录下时.exe还是不能启动. 经过网上查找,看到一篇文章."解决"应用 ...

  9. 解决“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”

    今天遇到几次打开dreamweaver cs3时显示"由于应用程序配置不正确,应用程序未能启动.重新安装应用程序可能会纠正这个问题",网上搜了一下.终于找到答案.遇到同样问题的朋友 ...

最新文章

  1. 虚拟机VMware14安装kali-linux-2019.1-amd64
  2. 想学图像分割,强烈建议从这5篇图像分割算法综述
  3. C1 FlexGrid 行Style设置问题
  4. 重温WCF之会话Session(九)
  5. WINDOWS系统文件讲解
  6. 计算机科学825,2017年河南大学计算机与信息工程学院825专业基础课(软件工程导论、数据结构)之数据结构考研题库...
  7. python故事_python的故事
  8. mysql执行语句返回主键_mysql语句insert后返回主键
  9. elasticsearch报错org.elasticsearch.discovery.MasterNotDiscoveredException: null
  10. mysql 10106_mysql出现:Can’t create TCP/IP socket (10106) (#2004)
  11. LZW压缩(解压缩)算法详解及源码
  12. office2007在ppt中插入文件对象(可以单击打开)
  13. 浅谈快速开发平台:突破系统开发边界,赋能企业数字化!
  14. 还在寻找一款DVD全能转换器吗?WinX DVD Ripper for Mac它不香吗?
  15. FPGA数字信号处理(25)数字相关器设计(经典结构)
  16. 计算机机房管理系统 数据库课设,学校机房管理系统数据库课程设计.doc
  17. 影视剪辑,如何一个人自学短视频7天vlog教程
  18. 【记录】IOS手机如何配置whistle代理进行抓包?(苹果系列)(安卓应该也是类似处理)
  19. 【Axure教程】随机抽奖原型
  20. 电脑和手机实现网页互相切换

热门文章

  1. ae可围绕帧拖动放大插件:Drag Zoom Pro for AE mac(兼容M1)
  2. M1芯片MacBook Pro/Air能兼容哪些软件?M1 mac软件兼容一览表
  3. java 比较源文件_Beyond Compare比较Java源代码文件的操作流程
  4. 1168:大整数加法--2022.01.22 AC
  5. 1.7 编程基础之字符串 16 忽略大小写的字符串比较 python
  6. P3383 【模板】线性筛素数
  7. python读取txt文件存储数组_python : 将txt文件中的数据读为numpy数组或列表
  8. python pca降维_机器学习之sklearn中的降维算法
  9. postMessage跨域、跨iframe窗口消息传递
  10. Java笔记-使用System.gc()进行内存回收