vc2008不安装vcredist发布程序

831 篇文章 16 订阅
以前一直用vc6,不是喜欢他什么,最重要的一点是用它发布程序方便,搬到别处的电脑几乎不会出现什么问题。而vc9发布程序,很容易出现程序配置错误等问题而无法运行,导致的原因是与环境dll有关,找了很久终于找到很详细的解答,以下是地址
http://blog.csdn.net/xiaojianpitt/archive/2009/06/15/4269641.aspx

vc2008程序发布指南2008-05-03 17:46vc2008开发的程序的发布方式可以有5种方式:

1. 采用静态链接到crt和MFC. 只要你拥有组成程序的所有源代码,你就可以采用这种方式,
这种方式除了程序变大一点,好处多多:
1) 不必重新发布vc2008基础库vcredist_x86.exe(安装到WinSxS).
2) 不必产生,嵌入manifest.
3) 也不把vc2008基础库放在程序所在目录.

2. exe(嵌入manifest) + vcredist_x86.exe

   确保程序正确产生并嵌入manifest文件,然后把程序和vcredist_x86.exe一起发布.用户先安装
vcredist_x86.exe(安装到WinSxS),然后程序就能正常运行了.

3. exe(嵌入manifest) + 用到的基础库文件放到程序目录(包括库文件本身的manifest文件)

   确保程序正确产生并嵌入manifest文件,然后把程序用到的vc2008基础库相关文件复制到程序
所在目录,这种方式适用于用户没有安装过vcredist_x86.exe,一旦用户安装过vcredist_x86.exe,
若WinSxS中的相关文件遭到破坏,那么即使在程序目录放上所有用到的vc2008基础库,程序也跑
不起来;若WinSxS中的相关文件正常,那么程序目录下的相关文件就是多余的了,删掉它们程序也能
正常运行.

4. exe(自行编写manifest) + vcredist_x86.exe

5. exe(自行编写manifest) + 用到的基础库文件放到程序目录(包括库文件本身的manifest文件)

个人偏向第五的方法

在vc2008中,工程属性可以设定manifest是不是嵌入到文件,经过测试,在没有安装vcredist的xp系统上,将基础库文件放到程序目录就 行了,当然要包括库文件的manifest。而不嵌入manifest的好处就是第三点说到的。因为程序会优先检测winsxs的,如果里面存在却是错误 的,导致程序跑不起来,那么如果不将manifest内嵌,就一定能保障程序能找到正确的配置文件和相关的库文件。

举个例子:
一个程序只用CreateWindow来创建一个窗口和一个按钮
在项目属性->清单工具->输入输出   中 将清单嵌入设为否,那样就会帮你生成manifest文件而不会将它嵌入

然后,在链接器->清单文件->附加清单依赖项 中加入
type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='X86' publicKeyToken='6595b64144ccf1df' language='*'

这样,通用控件就能使用系统的主题样式。

编译程序后,除了程序文件xxx.exe和xxx.exe.manifest外,到VC\redist中找到相应的dll和manifest
这个程序就需要msvcp90d.dll msvcr90d.dll msvcm90d.dll 和 Microsoft.VC90.DebugCRT.manifest
因为这是调试版本,所以基础库都是msvc...d.dll
Release版本就找对应的版本和manifest就可以了。



注意,如果程序跑不起来,看看程序的manifest文件中指定的基础库版本和复制过来的dll文件版本是否一致。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值