害人的VS2008,manifest导致“应用程序配置不正确,应用程序未能启动”

在VC++2008的项目中,如何显示地指定要使用的C++库的版本? 

开发环境:VS2008 SP1 + Win2003 SP2 
        因为我的VS2008安装了SP1补丁,所以有了9.0.30729.1的MFC库文件(MFC90.DLL MSVCR90.DLL)。 

新建了一个MFC应用程序,编译为RELEASE版本,叫做“test1.exe”,可以从程序中的清单文件(manifest)看到以下内容: 

XML code

... <dependency>

<dependentAssembly>

<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b'/>

</dependentAssembly>

</dependency>

<dependency>

<dependentAssembly>

<assemblyIdentity type='win32' name='Microsoft.VC90.MFC' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b'/>

</dependentAssembly>

</dependency> ...

说明本程序需要引用版本号为9.0.21022.8的MFC库和运行时库。 

问题一:为什么程序在运行的时候,载入的不是9.0.21022.8版本的却是9.0.30729.1版本的运行库?这是在哪里进行设置的?如何改变这个版本号? 

问题二:(虽然貌似已经解决,但是我想知道的更深一点) 
布署的时候,把X:\VS安装目录\VC\redist下对应的运行库和.manifest文件(都是9.0.30729.1版本的)复制到与test1.exe同一目录下。在一台完全干净的新系统中,会出现“应用程序配置不正确,应用程序未能启动”的错误。 

后来,经过不断的试验,发现应用程序中的MANIFEST文件指定的是9.0.21022.8版本的运行库,然后我使用9.0.21022.8版本的Microsoft.VC90.CRT.manifest文件替换9.0.30729.1版本的Microsoft.VC90.CRT.manifest,配合上30729版本的MFC90.DLL,程序就可以正常运行了。 

简单一点,就是,对于一个使用了新版本DLL功能的应用程序,有以下情况: 
应用程序中的MANIFEST文件[使用了使用了新版本DLL的功能 却指定了旧的版本号] + 新版本的运行库MANIFEST文件 + 新版本的运行库DLL --> 不可以运行 
应用程序中的MANIFEST文件[使用了使用了新版本DLL的功能 却指定了旧的版本号] + 旧版本的运行库MANIFEST文件 + 旧版本的运行库DLL --> 不可以运行 
应用程序中的MANIFEST文件[使用了使用了新版本DLL的功能 却指定了旧的版本号] + 旧版本的运行库MANIFEST文件 + 新版本的运行库DLL --> 可以运行 

注:运行库MANIFEST文件是指Microsoft.VC90.CRT.manifest和Microsoft.VC90.MFC.manifest,运行库DLL是指MSVCR90.DLL MFC90.DLL 

程序的清单文件不要内嵌,而使用外置的MANIFEST文件,然后手工把生成的text1.exe.manifest中的version='9.0.21022.8'改成新版本号version='9.0.30729.1' ,就可以达到以下目标了: 
应用程序 外置的MANIFEST文件[使用了使用了新版本DLL的功能 却指定了的版本号] + 新版本的运行库MANIFEST文件 + 新版本的运行库DLL --> 可以运行! 
(内嵌清单也是资源,当然可以修改,但是不建议这么做,而且也没必要这么做。)

终于终于,在微软网站找到了关于这个问题的描述。 
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=361682 
这的确是个BUG,具体什么时候会修复就不知道了。。。。。。。。 

所以,内嵌清单中的版本号只能为旧版本号,因此目前只能用,旧版本的运行库MANIFEST文件 + 新版本的运行库DLL ,才可以运行独立发布的程序了。。。

在VS2008中,“项目”-->“属性”-->“配置属性”-->“清单工具”-->“输入和输出”-->“嵌入清单”-->否。

这样程序编译后,假设是mytest.exe,将会产生一个mytest.exe.manifest,发布软件时最好附带上这个manifest文件,用记事本打开,可以看到对应MFC/CRT.manifest的版本。

在VS2008中,“项目”-->“属性”-->“配置属性”-->“清单工具”-->“输入和输出”-->“嵌入清单”-->是。mytest.exe将包含mytest.exe.manifest,不额外产生mytest.exe.manifest。

“配置属性”其它设置:(1)常规-->MFC的使用:在共享DLL中使用MFC;(2)C/C++  -->检查64位可一致性问题:否;(3)C/C++  -->代码生成-->运行时库:多线程调试DLL(/MDd);(4)链接器-->清单文件-->生成清单:是

时间: 2024-09-16 15:46:52

害人的VS2008,manifest导致“应用程序配置不正确,应用程序未能启动”的相关文章

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

  使用VS2008编译了一个程序,使用到自己编译的DLL,丢到某些机子上无法运行,提示"由于应用程序配置不正确,应用程序未能启动"的错误,装了vcredist_x86也没有用,开始以为是DLL的问题,后来换个简单的程序,仍然不行,百撕不得其解,后来上网找,下面有说了很多解决办法.         我最终的解决办法是复制本机中的.manifest文件,修改里面的版本号,复制到提示错误的机子上,与可执行程序放在同一目录就可以了.在计算机中管理的系统工具,事件查看器可以查看应用程序的消息,

电脑问题-由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。

问题描述 由于应用程序配置不正确,应用程序未能启动.重新安装应用程序可能会纠正这个问题. Unhandled exception has occurred in your application. If you click Continue, the application will ignore this error and attempt to continue. If you click Quit, the application will close immediately由于应用程序配

电脑问题-那位大神帮帮忙啊!由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。

问题描述 那位大神帮帮忙啊!由于应用程序配置不正确,应用程序未能启动.重新安装应用程序可能会纠正这个问题. 文档"> 解决方案 ??? 今天在准备发布用VS2005写的那个程序时,拷贝到我同事机器上,双击突然出现了"由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题" 想想,无非是两个原因引起的,要么是他没有安装VS2005的原因,要么是我的程序里依赖了其它的一些库.于是百度一下,发现好多相关主题. ? 以下是解决方法: ? 1 由于对...

程序配置不正确,应用程序未能启动 VS2008

问题描述 报错:Common7IDEdevenv.exe由于程序配置不正确,应用程序未能启动.重新安装应用程序可能会纠正这个问题!这个问题,我搜了几个小时了没有解决,各位大侠给个提示吧,急!!!!!! 解决方案 解决方案二:用你的VS安装文件修复一下吧.解决方案三:你在说清楚一点,是在运行什么事出现的错误啊?解决方案四:我也碰到过同样的问题,重新修复或者重新安装下VS2008吧!~解决方案五:修复一下呗解决方案六:同问啊,修复和卸载后重装都不管用的,哭!!!解决方案七:卸载,修复都不管用?是不是

&quot;由于应用程序配置不正确&quot;的解决办法

很多朋友遇到过开启QQ.PS.Snagit等程序时,报出"由于应用程序配置不正确,应用程序未能启动.重新安装应用程序可能会纠正这个问题".如下图: 图1 某程序报错 原因分析 综合互联网上的资料,绝大部分是以下两种原因: 1.该问题的原因之一:您的计算机的Windows Installer服务没有开启. 其解决方法是打开控制面板→管理→服务,将Windows Installer服务开启,并设为自动,再重启电脑. 2.该问题的原因之二:您的计算机上没有安装Visual Studio的运行

windows2003+iis6 运行php Error Description: 由于应用程序配置不正确

在winodws server 2003 上利用iis6.0搭建web服务器,采用php-cgi模式运行php脚本,提示如下错误! ■环境: windows server 2003 . iis6.0 . php5.3.2 . fcgi_1.5_x86 ■ 错误提示:   FastCGI Error The FastCGI Handler was unable to process the request. ---------------------------------------------

The application has failed...(应用程序配置不正确)_win服务器

        在我们开发工程中,可能有些情况下,不能在本机进行调试.这个时候我们一般会使用VM(vmware)建立一个虚拟机环境,然后把编译过的程序放在该虚拟机环境下执行调试.可是在某些情况下,不管我们编译的是debug还是release版本,在虚拟机环境中都会报"由于应用程序配置不正确,应用程序未能启动.重新安装应用程序可能会纠正这个问题."(The application has failed to start because its side-by-side configura

刷机精灵提示“应用程序配置不正确未能启动”问题

先看错误提醒 1.我们先安装旧版本的刷机精灵了,先把电脑中新版本的删除掉(推荐阅读:怎么卸载电脑中软件)在官方我们己经找不到旧版本了,这里我给大家提供一个下载地址:http://pan.baidu.com/s/1eQeL2ZC 2.旧版本的刷机精灵下载好了,我们打开压缩包,然后双击安装! 3.旧版本软件安装好之后我们肯定不如新版本好用了,所以这里我们来升级一下即可. 4.在打开的"刷机精灵"页面我们找到"立即升级"按钮 点击即可会发下面提醒正在升级. 5.升级是自动

Win7系统打开QQ提示配置不正确的原因及解决方法

  原因之一:您的计算机的Windows Installer服务没有开启. 解决方法: 打开控制面板→管理→服务,将Windows Installer服务开启,并设为自动,再重启电脑. 原因之二:您的计算机上没有安装Visual Studio的运行库. 该应用程序是Visual Studio 2005及其以上版本开发的,其依赖于相应的运行库,而您的电脑上没有安装该运行库.(对于VC6或VS2003开发的应用程序, 如果缺少库文件,是会提示缺少"**.dll",但VS2005或VS200