【问题标题】:Automatic installation of run-time libraries with WiX使用 WiX 自动安装运行时库
【发布时间】:2011-05-16 11:47:38
【问题描述】:

当我的文件集包含对 C++ 运行时 DLL 具有一个或多个依赖项的 DLL 时,我需要从 VCRedist.exe 安装该文件。这可能很困难,因为每个 DLL 都依赖于特定版本的 C++ 运行时。

  • 如何将运行时可再发行组件自动添加到我的安装程序?

  • 如何在 WinSxS 中处理需要不同版本的 C++ 运行时的 DLL?

【问题讨论】:

    标签: wix wix3.5 msvcrt


    【解决方案1】:

    您需要安装库所需的最新版本(最高)版本以及将旧版本重定向到新版本的策略文件。

    您可以同时使用随 Visual Studio 安装的合并模块。它们通常位于C:\Program Files\Common Files\Merge Modules。请参阅MergeRef 元素和示例how to install Visual C++ redistributable with your installer。您还需要在安装中添加策略合并模块。

    【讨论】:

      【解决方案2】:

      您可以简单地确保安装了最新的 vcredist,它会自动包含对旧版本的支持。

      我认为在安装程序运行之前使用bootstrapper 安装运行时最简单。您可能需要创建自己的包,但很容易为此使用Bootstrapper Manifest Generator

      在product.xml中可以添加安装检查,确保没有安装两次,例如:

        <InstallChecks>
          <MsiProductCheck Property="VCRedistInstalled" Product="{1F1C2DFC-2D24-3E06-BCB8-725134ADF989}"/>
        </InstallChecks>
      

      有关其他 GUID,请参阅 here

      【讨论】:

      • 'heat' 或 Votive 不支持检测这一点吗?我应该在检测后管理 .wxs 文件,但我们将不胜感激初始创建片段。
      • 引导程序不是 wix 的一部分,因此您不能为此使用热量。有关现有文件,请参见 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\*C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\*。使用 BMG 创建这样的文件。
      • 我不一定需要引导程序。在 WiX.CHM 部分“如何:使用安装程序安装 Visual C++ Redistributable”中,您可以找到如何包含合并模块。这是 WiX 的一部分,我正在寻找一种更方便且不易出错的方法。
      • 您也可以使用合并模块,正如 Alexey Ivanov 所建议的那样。但是我停止使用它,因为我在 wix 中经常收到由合并模块引起的警告。但是,合并模块工作正常。
      【解决方案3】:

      heat 和 Votive 都不支持请求的功能。必须手动添加运行时 DLL。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-22
        相关资源
        最近更新 更多