当前位置:  开发笔记 > 编程语言 > 正文

我应该使用vcredist.exe或msm来安装Visual C++运行时库

如何解决《我应该使用vcredist.exe或msm来安装VisualC++运行时库》经验,为你挑选了3个好方法。

使用vcredist.exe与msm文件安装Visual C++ 8.0运行时库有什么优缺点?



1> ZippyV..:

合并模块一旦安装就无法更新(除非他们在Windows Installer中解决了),所以我的建议是坚持使用vcredist.exe.


我们也得出了这个结论 - 我们希望将SQL Server Express与我们的安装程序捆绑在一起,但是选择合并模块显然意味着MS提供的Service Pack安装程序无法安装Service Pack,而是我们必须为每个SP构建我们自己的升级.似乎不适合我们的情况.

2> Jim..:

我最近碰到的合并模块的另一个问题是它们将MSI安装程序属性ALLUSERS设置为1,这意味着每台机器.这会强制您的整个安装是每台机器,如果您希望它是每个用户,这是一个问题.是否有一种方法可以让每个用户安装程序包含一个我不知道的CRT合并模块,但我还没有找到它.


像我这样的很多人仍会使用Google找到旧线程.所以它不是很老.FAQ说明线程(甚至是封闭的线程)"有资格改进".也许我应该使用评论而不是答案.

3> 小智..:

合并模块的一个缺点是您无法在同一个msi中部署多个版本的VC80或VC90合并模块,因为文件标识符重叠.您可以部署其中一个.因此,例如,如果您想部署RTM版本的VC80和SP1版本,如果它们位于相同的msi(我使用WiX),您将收到错误.

另一个问题,构建行为在VS 2005/2008之间是不同的,因为它与应用Service Pack或更新有关.

2005如果在构建计算机上安装Service Pack 1,程序将自动链接更新的文件.Service Pack还将更新合并模块,因此如果您指示安装程序使用更新的文件,那么您没问题.但是,如果您使用的第三方编译的静态库可能需要特定的旧版本运行时,这可能是一个问题.

2008这里的行为恰恰相反.如果安装SP1,则合并模块将更新到SP1级别,但除非设置每个项目的预处理器宏,否则程序将针对RTM版本进行编译:_BIND_TO_VCLIBS_CURRENT_VERSION = 1.这可以在stdafx.h中或在项目的"Preprossor定义"中设置,或者如果您使用的是旧的nmake项目,则必须在命令行选项的任何位置(例如CFLAGS)传递它.

这意味着如果您正在使用Visual Studio提供的msm,并且应用了SP1,则在您定义宏之前,项目部署将会中断.

宏的另一个警告:如果您使用的是链接2008静态库的2005项目,那么设置宏将打破2005项目,因为2005版本的编译器中不存在该符号.在这种情况下,我通常将我链接的项目拆分为2005和2008版本的解决方案.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有