部署VC2008的程序
来源:互联网 发布:网络电视ssid怎么设置 编辑:程序博客网 时间:2024/05/22 15:51
如果你编译了一个VC2008的默认的CRT/MFC的应用程序,如果目标部署电脑上没有安装相应的VC2008的动态库,当运行你的程序的时 个,会出现如下错误信息.
这是因为程序使用了基于VC2008的CRT/MFC的动态库版本.
解决这个问题,有三种方法:
1.使用静态链接库编译(缺点,生成的exe的程序过于庞大)2.使用vcredist_x86.exe / vcredist_x64.exe 将VC2008的发行版的DLL安装在你的系统上.(缺点,只能支持发行版,调试版程序不能支持)3.将你的程序依赖的CRT/MFC的动态库与你的程序一起发布(放在与你的发布程序同一目录中)
第一种和第二种就不详细讲如何实现了,只要讲第三种方法如何实现.优其是程序的开发是使用了VC2008 SP1的版本开发的程序.
在你的VC2008的安装目录下有两个目录,
- C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT
- C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.MFC
只要将这两个目录下的文件一同拷贝到发布程序的同一目录下:
Microsoft.VC90.CRT.manifest
msvcr90.dll
msvcp90.dll
msvcm90.dll
Microsoft.VC90.MFC.manifest
mfc90.dll
mfc90u.dll
mfcm90.dll
mfcm90u.dll
这些是这个程序依赖的发行版动态库,同理,如果是调试版的发布程序,也一样把相应的调试动态库拷贝到相应目录.
程序如你意运行起来了!
但是,如果你安装的是VC2008 SP1的版本的时候,问题就来了,你的程序也一样运行不起来了!
原因就是安装了VC2008 SP1的时候,它把"VC/redist"用新的版本文件代替了,问题不大,但是,这个程序的版本是依赖于新的manifest的文件的,当你编译 VC2008-SP1的程序的时候,它同时把RTM-version写入程序的manifest文件中,这个是旧的RTM-version,不与新版本的 VC2008-SP1的"CRT/MFC"manifest版本一致,因此程序运行的时候是拒绝导入这些新的VC2008-SP1的CRT/MFC的运态 库!
解决方法有两种.
- 方法一:
最简单的,修改Microsoft.VC90.CRT.manifest和Microsoft.VC90.MFC.manifest文件,将新 的版本号改为旧的版本号,如果是依赖其它的Microsoft.VC90.*.manifest的文件,也同样是如此修改!如果是装了VC2008-SP1后,它的版本号是“9.0.21022.8″未装VC2008-SP1前的版本号为"9.0.21022.8"过程如下:将所依的动态库的及它们的 manifest 文件拷贝到发布应用程序的同一目录下,并修改Microsoft.VC90.*.manifest文件,将version="9.0.30729.1"
修改为
version="9.0.21022.8"
恭喜你,你的程序运行 起来了!
- 方法二
修改你的程序的所依赖的manifest,这样程序会依整于新的manifest.
过程如下:
在stdafx.h
这 个文件中,增加如下宏定义:
#define _BIND_TO_CURRENT_VCLIBS_VERSION 1
程序编译后就会依赖于新的manifest,版 本号为"9.0.30729.1"无须再修改manifest文件中的version版本号了.
将所依的动态库的及它们的 manifest 文件拷贝到发布应用程序的同一目录下
恭喜你,程序又运行起来了!
注意:如果你是想要新的MFC-feature-pack的功能,用这种方法是最好的.
注意一点,非常重要,如果已经安装了vcredist_*.exe程序包,注意的是Dll会自动把引用调到系统目录下的WinSxS目录下的, 即不再引用同一目录下的动态库!
如果是编译时使用了(/clr)这个编译选项去支持.net开发,你必须要安装.net framework redistributable包!
如果是编译时使用了(/clr)这个编译选项去支持.net开发,你必须要安装.net framework redistributable包!
不过,在2010,编译的程序会不再需要manifest文件!
- 部署VC2008的程序
- 部署vc2008开发的程序
- VC2008开发的程序的部署
- 解决vc2008写的win32程序部署错误( 想用vs2008写马的来看看。)
- VC2008程序的runtime环境
- vc2008开发的程序的发布方式
- 基于VC2008的sqlite3的例子程序
- 如何发布VC2005/VC2008编译的程序
- 如何发布VC2005/VC2008编译的程序
- 如何发布VC2005/VC2008编译的程序
- VC2008减小对话框程序大小的方法 .
- 关于“vc2008程序发布”的实践
- 部署VC2008应用程序
- 部署VC2008应用程序(2)
- 部署VC2008应用程序
- 部署VC2008应用程序
- 部署VC2008应用程序
- 部署VC2008应用程序
- C语言中的指针之回调函数
- java定时器--TimerTask 与 Timer
- o.boj 1446 冰淇淋
- IBATIS SQLMAP模板
- [JavaScript]使用jquery获取iframe加载完成事件
- 部署VC2008的程序
- 随时随地,记录一切:有道笔记(轻松同步、管理终端的所有笔记)
- android菜单详解二:选项菜单
- 移动优先的设计常识:应用如何组织?
- Gzip Zlib PNG 压缩算法 Gzip源码详解
- 初识AS3.0
- 《《强烈推荐的javs面试题》》!!很受用哦,涉及很多的基础知识点!强烈建议要面试的童鞋看看哦
- html5
- 最受欢迎的ASP.NET的CMS下载