http://hi.baidu.com/fairysky/blog/item/e7a8366dbaa735f3431694c8.html

先鄙视一下百度空间的编辑器,实在是太差了,在word编辑的东西,拷贝到这里就成这个丑样了......

参考资料

1、VS2005解决"应用程序配置不正确,程序无法启动"问题

2、VS2005安装文件 "由于应用程序配置不正确,应用程序未能启动"

3、Microsoft Visual C++ 2008发布程序的部署问题

4、VC编写的程序不能在其他机器上运行的解决方案

新增(先看看上面的4个链接之后,遇到问题之后再看下面的几个链接)

5、关于vs2008 sp1 C++生成的 manifest中运行库版本号的问题 (推荐1)

6、在VC++2008的项目中,如何显示地指定要使用的C++库的版本? (推荐2)

7、VC9 SP1 generates manifests with the wrong version number

ps:有人认为这是一个bug,并汇报到ms网站上,但“推荐1”认为这不是一个bug

8、VC Runtime Binding...(ms的官方blog对这个问题的解释)

关于VC运行时绑定(上面链接的中文翻译)

9、部署 (C++)(推荐,比较难看懂)

关于链接9下几个比较有用的链接:

程序集搜索顺序(英文),主要讲的是CRT、MFC等的DLL和manifest文件的部署方式

选择部署方法

使用 Program Files/Microsoft Visual Studio 8/VC/Redist目录中提供的文件将特定 Visual C++程序集作为应用程序的私有程序集安装。允许没有管理员权限的用户安装应用程序或可以通过共享运行应用程序时,建议使用这种方法。有关示例,请参见如何:使用 XCopy进行部署。(摘自:选择部署方法)

总结如下:

使用vs2008/vs2008开发的程序有2种部署方法:共享并行程序集和私有程序集部署方法

所谓的共享并行程序集部署方法是指程序依赖的CRT、MFC、ATL的DLL和manifest文件位于目标机器上的c:/windows/winsxs目录中,发布程序的时候只需要将程序拷贝到目标机器上就可以了;私有程序集部署方法指的是发布程序程序的时候,将所依赖的crt、mfc、atl的dll放在程序的当前目录下

对于release版程序

比较的简单的方法是采用共享程序集的方式来部署,安装vcredist.exe (Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)

也可以采用下面debug程序的私有程序集的部署方法

对于debug版本程序

◆ 若目标机器安装了VS开发环境(vs2005 sp1/vs2008 sp1),则在机器上同时也安装了共享并行程序集,包含各个版本的dll(8.0、9.0版本,位于C:/Windows/Winsxs目录下),则不需做任何的部署,直接将需要发布的程序拷贝到目标机器上就可以了,这和release版程序的发布方式是一样的

◆ 在没有安装VS开发环境(安装了vs2005 sp1/vs2008 sp1)的机器上,只能采用私有程序集的方式来部署(因为vcredist.exe只安装了release版的CRT、MFC、ATL的DLL和manifest文件,没有对应的debug版本)

已知的2种方法:(针对vs2008 sp1,安装了sp1之后,在系统上会存在两个版本的CRT、MFC、ATL的DLL:9.0.21022.8和9.0.30729.1)

1、使当前程序的manifest文件中的依赖项的版本号与vc安装目录下的redist目录下的dll的版本一致,均为9.0.30729.1

方法:

a、在编译项目时定义一个符号_BIND_TO_CURRENT_VCLIBS_VERSION,该符号定义于C:/Program Files/Microsoft Visual Studio 9.0/VC/include/crtassem.h 文件中(假设VC安装在c盘),这样使得编译后的程序的manifest依赖于CRT 9.0.30729.1版本(同样的,对于MFC也应该定义一个类似的符号,大家可以自己在VC的include目录下搜索“9.0.30729.1”或“9.0.21022.8”,就可以找到对应的定义该符号的头文件)

b、通过外部工具修改生成的exe或dll中manifest文件(好像windows sdk中的mt.exe可以做到,不过关于这个工具的资料十分的少)

2、将VC安装目录下的redist目录下(C:/Program Files/Microsoft Visual Studio 9.0/VC/redist)的Microsoft.VC90.CRT拷贝到要发布的程序的当前目录下,修改Microsoft.VC90.CRT目录中的Microsoft.VC90.CRT.manifest文件中的版本号,改成9.0.21022.8,这样使得程序误以为该目录下的vc的dll版本是9.0.21022.8(实质上仍然是9.0.30729.1版本)

说明:

1、链接4 的说法是错误的,根据我自己的实验,如果采用私有程序集的部署方法,必须保证manifest文件中的版本号都是相等的,不存在要发布的程序的manifest文件中的版本号大于等于依赖项(CRT、MFC、ATL的dll)的版本号的说法

2、采用共享并行程序集部署方式发布的程序,会自动根据所谓的“policy”(位于C:/WINDOWS/WinSxS/Policies目录下)进行跳转(由低版本号向高版本号跳转);例如程序中的manifest的版本号为9.0.21022.8,而实际上程序是用vc2008 sp1编译的(版本号为9.0.30729.1),在程序实际执行的时候,会根据

x86_policy.9.0.Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_x-ww_037be232目录下的9.0.30729.1.policy文件(可以用记事本打开该文件)中的内容选择9.0.30729.1版本的debugCRT

我个人推荐的阅读顺序:① 先看前面的4个链接,大致有点印象,知道什么是manifest、如何查看manifest文件的内容(能力强的话,也可以自己编写manifest文件)、在vc中如何查看编译过程中生成的manifest文件内容、知道C:/WINDOWS/WinSxS/目录是干什么的、知道vcredist.exe这个程序; ② 再尝试着看看链接7、8、9,这些链接的文章内容十分的晦涩,有的还是英文的,需要有点耐心看; ③ 最后仔细的看看链接5、6,并多多试验(特别推荐链接5,这个链接中的内容十分的详细)

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

  1. 由于应用程序配置不正确,未能启动该应用程序。请查看清单文件以查找可能的错误

    以前.net 2.0写的一个winform程序,选择转到vs2008,net 3.5下,转换成功完成,但是启动时报错: "由于应用程序配置不正确,未能启动该应用程序.请查看清单文件以查找可能 ...

  2. “由于应用程序配置不正确,程序未能启动”--原因及解决方法

    问题描述: 当运行由VC 2005 编译的程序时,出现错误消息"由于应用程序配置不正确,程序未能启动.重新安装应用程序可能会纠正这个错误" 解决方法: 在目标机器安装VCRedis ...

  3. 由于应用程序配置不正确,程序未能启动”--原因及解决方法

    由于应用程序配置不正确,程序未能启动"--原因及解决方法 http://moogge.spaces.live.com/blog/cns!ab9b00d806d52aed!245.entry ...

  4. 【IDE-Visual Studio】无法启动程序 xxx exe 由于应用程序配置不正确,未能启动此应用程序

    问题 解决方案 如下图设置工程属性: 配置属性->链接器->清单文件->生成清单=否 再分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们 ...

  5. 【原】解决VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题...

    --更新于2011/4/19,针对最新的VS2008补丁,VS2005/2010同样适用. VC9编译的程序在没有装过VC9(确切的说是.Net Framework3.5)的机器上运行时,如果提示&q ...

  6. VS2008环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动”的问题(IIS)...

    比较全的有关vs2008部署问题集(1): http://blog.csdn.net/buhuizheyangba/article/details/7220598 比较全的有关vs2008部署问题集( ...

  7. “应用程序配置不正确”解决方案

          VC9编译的程序在没有装过VC9的机器上运行时,如果提示"由于应用程序配置不正确,应用程序未能启动.重新安装应用程序可能会纠正这个问题."这个错误,那么就说明该程序动态 ...

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

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

  9. MFC的exe启动时提示应用程序配置不正确,应用程序未能启动错误

    MFC的exe启动时提示应用程序配置不正确,应用程序未能启动错误 老姐笔记本中毒太深于病入膏肓,无奈迫写一程序"曲线救国".刚启动自己写的程序就出现应用程序配置不正确,应用程序未能 ...

最新文章

  1. iOS物理碰撞、唱吧音频处理、仿淘宝联动效果等源码
  2. VTK:图片之ImageTransparency
  3. My Opportunity应用点击Edit后出现time out的错误分析
  4. 怎样推断两个日期在一周内
  5. linux下4g显卡可以挖矿吗,文件不断扩大,ETH矿工即将面临重大抉择问题
  6. c语言程序错误提示一个找不到,C语言编辑程序出现错误提示.doc
  7. eclipse报错Project facet Cloud Foundry Standalone Application version 1.0 is not supported.
  8. 从Oracle向PPAS移行不成功时的处理
  9. Eclipse中的SVN插件
  10. respondsToSelector
  11. CNN图像识别_算法篇
  12. 自动关机win10_win10系统U盘使用步骤酷比魔方平板电脑windows安装教程
  13. 首都师范 博弈论 5 4 3 多人合作博弈问题 Shapley值计算之股权与控股权
  14. qplot函数添加回归曲线R方方差分析表
  15. Chrome浏览器关闭地址栏的搜索记录
  16. docker学习笔记(10):docker迁移与升级等其它操作
  17. dataFrame使用loc根据if条件修改列值
  18. Oracle导入.DMP文件命令
  19. html5仿苹果通讯录效果,iOS 仿通讯录索引
  20. 积水在线监测设备解决车辆误入水淹隧道问题

热门文章

  1. Linux 进程通信之:管道 (Pipe)
  2. paper fast review :Deep Residual Shrinkage....
  3. Hikvison对接NVR实现WEB无插件开发包实现前端视频预览(html、vue、nginx代理)
  4. plsql无法连接oracle,报错:ORA-12514
  5. flexray unknown message
  6. LoadLibrary failed with error 1114:动态链接库(DLL)初始化例程失败 解决方法
  7. LINUX JDK 安装与环境变量设置
  8. 【educoder】头歌 数据结构与算法 答案
  9. 从零开始的MySQL教程——上
  10. QT中的模态和非模态对话框