编译的程序在某些机器上运行提示“由于应用程序配置

编译的程序在某些机器上运行提示“由于应用程序配置

ID:41011224

大小:46.51 KB

页数:8页

时间:2019-08-13

编译的程序在某些机器上运行提示“由于应用程序配置_第1页
编译的程序在某些机器上运行提示“由于应用程序配置_第2页
编译的程序在某些机器上运行提示“由于应用程序配置_第3页
编译的程序在某些机器上运行提示“由于应用程序配置_第4页
编译的程序在某些机器上运行提示“由于应用程序配置_第5页
资源描述:

《编译的程序在某些机器上运行提示“由于应用程序配置》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题文章分类:C++编程VC9编译的程序在没有装过VC9(确切的说是.NetFramework3.5)的机器上运行时,如果提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”这个错误,那么就说明该程序动态链接了VC9的运行时库,(如果还用到了MFC,那么可能动态链接了VC9的MFC库,同理还有ATL库),以及缺少对应的manifest文件,程序在目标机器上没有找到这些库和配置文件,因此导致

2、了这个错误。出现这种情况的VC9编译器可能存在3个版本,接下来分别阐明:1、没有打过任何补丁的VS2008该版本对应的CRT/MFC/ATL库的版本号为9.0.21022.8,这个版本号在后面会用到。这个版本的程序部署比较简单,直接把VC安装目录下的redist目录(C:ProgramFilesMicrosoftVisualStudio9.0VCredist)中需要的库以及对应的manifest文件拷贝到执行程序同目录下,这样程序到任何机器上都能够正常运行了。2、打过SP1补丁的VS2008打过该补丁

3、后,系统中存在着两个版本的CRT/MFC/ATL库,版本号分别为9.0.21022.8和9.0.30729.1,这导致了manifest文件中记录的版本号和实际库的版本号不一致(程序要求它们的版本号一致才能运行)。这个版本的程序部署需要两个步骤,首先要使manifest文件中依赖项的版本号与实际库的版本号一致,均为9.0.30729.1,方法是在工程设置中增加一个宏定义_BIND_TO_CURRENT_VCLIBS_VERSION,该宏定义于C:ProgramFilesMicrosoftVisualStu

4、dio9.0VCincludecrtassem.h文件中,然后重新编译程序。接下来还是将VC安装目录下的redist目录(C:ProgramFilesMicrosoftVisualStudio9.0VCredist)中需要的库以及对应的manifest文件拷贝到执行程序同目录下,然后修改manifest文件中依赖项的版本号为9.0.21022.8,这样使得程序误以为该目录下库的版本号为9.0.21022.8(实际上是9.0.30729.1版本),这样程序到任何机器上都能够正常运行了。3、打过SP

5、1补丁与SP1ATL安全更新(KB973675)的VS2008这是最新的更新。在SP1补丁之后,微软又于近日发布了一个用于智能设备的MicrosoftVisualStudio2008ServicePack1ATL安全更新(KB973675),该补丁又将CRT/MFC/ATL库的版本号升级,为9.0.30729.4148,这次升级比较好,manifest文件与库的版本号一致了,不像SP1一样升级的不彻底。这样只需要在工程设置中增加一个宏定义_BIND_TO_CURRENT_VCLIBS_VERSION,接下来重

6、新编译程序,然后直接把VC安装目录下的redist目录中需要的库以及对应的manifest文件拷贝到执行程序同目录下,这样程序到任何机器上都能够正常运行了。顺便提一下,如果不想在发布程序时带上这些库和manifest文件(如果没有必要的话),那么可以采用静态编译CRT和MFC,然后把manifest文件添加到资源中,这样编译出的程序只要一个exe就可以在任何机器上直接运行了。参考文章:1、“应用程序配置不正确,程序无法启动”的解决方法资料收集:有的时候,你在VisualC++上面经过好几个月的辛勤努力,终于将

7、程序编写完成并且测试完毕,然而当你试图在客户的发布机上运行刚写好的程序时,有可能会碰到类似下面的错误,操作系统告诉你“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”.一般情况下,这个问题都是由于程序不能找到所需要的C运行库(CRT)而引起的。 在WindowsXPSP2以后,Windows引入了Side-by-Side执行的概念,这个概念本来是.NET提出来的,但是Windows后来将这个概念集成到操作系统层面上来了。大家都应该知道DllHell的问题,为了解决DllHell的

8、问题,Side-By-Side提出不同版本的dll文件可以同时存在于同一个系统里面,而且依赖于不同版本dll的应用程序在运行的时候可以使用到它当初被编译生成的dll。前面的话,有点绕,举个例子:1.        假定你编写了一个C++程序A,是使用MFC8.0(这个版本是随着VisualStudio2005)发布的。2.        之后你的机器升级了VisualStudio的版本,从2005升

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。