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
vcredist_x86.exe(安装到WinSxS),然后程序就能正常运行了.
3. exe(嵌入manifest) + 用到的基础库文件放到程序目录(包括库文件本身的manifest文件)
所在目录,这种方式适用于用户没有安装过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来创建一个窗口和一个按钮
在项目属性->清单工具->输入输出
然后,在链接器->清单文件->附加清单依赖项 中加入
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就可以了。
![](https://img-my.csdn.net/uploads/201207/26/1343311728_9991.jpg)
注意,如果程序跑不起来,看看程序的manifest文件中指定的基础库版本和复制过来的dll文件版本是否一致。