部署VC2008应用程序
转自:http://blog.csdn.net/laiboy/article/details/5038165
如果你编译了一个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.30729.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包!不过,在2010,编译的程序会不再需要manifest文件!
部署VC2008应用程序相关推荐
- MindSpore部署图像分割示例程序
MindSpore部署图像分割示例程序 本端侧图像分割Android示例程序使用Java实现,Java层主要通过Android Camera 2 API实现摄像头获取图像帧,进行相应的图像处理,之后调 ...
- 《ASP.NET 开发从入门到精通》----2.3 编译和部署ASP.NET程序
本节书摘来自异步社区<ASP.NET 开发从入门到精通>一书中的第2章,第2.3节,著 张明星 ,责任编辑 张 涛, 更多章节内容可以访问云栖社区"异步社区"公众号查看 ...
- (二)Amazon Lightsail 部署LAMP应用程序之部署单片LAMP应用程序
部署单片LAMP应用程序 简介:通过复制应用程序代码并提供链接PHP前端和本地MySQL数据库的参数,将LAMP对战应用程序部署到先前启动的Lightsail实例中.完成后,Apache/PHP前端和 ...
- 开发笔记7 | 部署 Go 应用程序到阿里云 ECS
前言 在上一篇文章中,我们介绍了<部署 Java 应用程序到阿里云 ECS>,在本文中,我们来介绍 部署 Go 应用程序到阿里云 ECS. 本地开发 无论是编写云端运行的,还是编写本地运行 ...
- 如何打包和部署air应用程序
来源:http://www.solosky.net/2010/12/package-and-deploy-air-application.html 昨天折腾了一个晚上,终于把我写的美女时钟桌面 的ai ...
- CentOS单机安装k8s并部署.NET 6程序
学习云原生,k8s 是一个基础,为了做一些实验,单机部署是最方便的,下面将介绍在 CentOS 中单机安装 k8s ,并将一个 .NET 6 的程序发布到 k8s 中. 环境 宿主机:Mac 10.1 ...
- nginx部署与小程序配置
nginx部署与小程序配置说明 1.安装nginx $ sudo apt-get update $ sudo apt-get install nginx 2.配置https: 查看: https:// ...
- 如果在docker中部署tomcat,并且部署java应用程序
2019独角兽企业重金招聘Python工程师标准>>> 如果在docker中部署tomcat,并且部署java应用程序 博客分类: docker 1.先说如何在docker中部署to ...
- 怎么抓python程序的包_如何在AWS上部署python应用程序
如何在AWS上部署python应用程序,学姐呕心沥血亲自总结,亲测有效,比网上看网上大把大把的文档要快得多! 作者:蕾学姐 亚马逊云计算服务(Amazon Web Services,缩写为AWS),由 ...
- docker 发布tomcat项目_在docker中部署tomcat并且部署java应用程序的步骤详解
1.先说如何在docker中部署tomcat 第一步:root用户登录在系统根目录下创建文件夹tomcat7,命令如:mkdir tomcat7,并且切换到该目录下:cd tomcat7: 第二步:创 ...
最新文章
- python输入输出-Python input()和print()终端输入输出
- mysql全局权限账户%登录不上ERROR 1045 (28000): Access denied for user #39;mhz#39;@#39;localhost#39; (using ...
- idea自动更新java_IntelliJ IDEA自动更新资源文件
- UNWAVERING SPIRIT AND VALUES
- Quartz执行周期配置
- 【dfs】【模拟】【树】I Like Matrix Forever!
- Oulipo (KMP出现次数)
- RDD持久化、广播、累加器
- 操作系统复习之进程描述和控制
- mysql数据库d盘_Windows Server 2008 R2下修改MySQL 5.5数据库目录为D盘
- 寒假学习之stm32(15)----DMA(direct memory access)
- Boolean中0与1的转化
- 等保2.0控制点总结
- html个人中心网页,个人中心页面.html
- 【Excel】给自己做个2020年高考倒计时
- C#与Word文档的交互
- 身份证号码含义及最后一位校验算法(ISO 7064:1983.MOD 11-2)
- 测一测自己的Sql能力之MYSQL的GROUPBY你弄懂了吗?
- html制作京东新闻资讯页,京东店铺怎么建立活动页面?如何实现具有视频的活动页?...
- CodeForces - 1569B Chess Tournament