代码之家  ›  专栏  ›  技术社区  ›  Adam Tegen

我应该使用VCREDIST.EXE还是MSM来安装VisualC++运行库

  •  13
  • Adam Tegen  · 技术社区  · 16 年前

    使用VCREDIST.EXE与MSM文件安装Visual C++ 8运行时库的好处和缺点是什么?

    6 回复  |  直到 15 年前
        1
  •  8
  •   ZippyV    16 年前

    合并模块安装后无法更新(除非它们在Windows Installer中解决了这一问题),因此我的建议是坚持使用vcredit.exe。

        2
  •  6
  •   Jim    13 年前

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

        3
  •  5
  •   Brian    15 年前

    合并模块的一个缺点是不能在同一msi中部署多个版本的VC80或VC90合并模块,因为文件标识符重叠。不过,您可以分别部署其中一个。例如,如果您想要部署VC80的RTM版本和SP1版本,那么如果它们在同一个msi(我使用WiX)中,您将得到错误。

    另一个问题是,构建行为与VS2005/2008不同,因为它涉及应用service pack或更新。

    2005 如果在生成计算机上安装service pack 1,则程序将自动链接到更新的文件。service pack还将更新合并模块,因此只要您让安装程序使用更新的文件,就可以了。但是,如果您使用的是第三方编译的静态libs,可能需要较旧版本的运行库,那么这可能是一个问题。

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

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

        4
  •  3
  •   Brian    16 年前

    显而易见,如果您不打算使用MSI安装程序,那么合并模块并不是一个好的解决方案。无论您使用的是什么安装过程,vcredit的使用都非常简单。

        5
  •  2
  •   Shay Erlichmen    16 年前

    MSM将为您提供比vcredist更好的流线型体验,它将与进度条集成,并在出现错误时回滚(或取消)。

    由于以上所有原因,我通常选择使用msm(及其或多或少的一个Wix衬里)。

        6
  •  0
  •   Rob    16 年前

    你考虑过静态链接吗?那么你就没有再分配问题了。