使用合并模块重新发布组件

重要

在 Visual Studio 2019 及更高版本中,已弃用 Visual C++ 可再发行程序包文件的合并模块。 不建议将它们用于应用程序部署。 使用合并模块安装的可再发行程序包不能通过 Windows 更新进行更新,因为检测机制取决于所知道的安装包的详细信息。 Visual C++ 可再发行程序包对于每个版本都是已知的,但使用 MSM 的包是用户生成的。 Microsoft 无法知道用户生成的包的详细信息。 而是,建议使用 Visual C++ 可再发行程序包的集中部署。 中央部署在 Windows %SYSTEMROOT%\system32\ 文件夹中安装可再发行程序包文件以供所有应用程序和用户使用。 可再发行程序包的集中部署使 Microsoft 可以独立地为运行时库文件提供服务。 并且,卸载应用不能中断其他也使用中央部署的应用程序。 使用可再发行程序包进行中央部署时,你不负责在应用程序维护过程中跟踪和更新运行时库:Microsoft 更新服务会为你更新这些库。 否则,对运行时库文件的更新需要更新和重新部署 .msi 安装程序。 在这样做之前,你的应用可能容易受到 bug 或安全问题的影响。

Visual Studio 包括获得许可与应用程序一起重新分发的每个 Visual C++ 组件的合并模块.msm 文件)。 每个目标平台都有不同版本的合并模块。 将合并模块编译到 Windows Installer 安装程序文件中时,它可以将 Visual C++ 可再发行程序包文件部署到该特定平台。 不能在一个安装程序中包含同一个 DLL 的不同版本的合并模块。 在你的安装文件中,请指定合并模块是应用程序的先决条件。

可以将合并模块用于中央部署本地部署。 除非用户具有管理员权限,否则无法安装集中部署的文件。 本地部署可能允许非管理员安装和运行应用,但以独立可维护性为代价。

如果尝试在较新的现有库上集中部署较旧的合并模块,则安装服务将报告错误。 应编写安装程序以正常处理此故障,而不显示错误消息。 尽管出现此故障,代码仍可成功部署和运行。 有关详细信息,请参阅 Visual Studio 版本之间的 C++ 二进制兼容性

如果仅将代码部署为 .msi 安装程序,建议不要在安装程序中包含合并模块。 而是,在找不到所需的可再发行程序包库时向用户报告失败。 在失败对话框中,包括有关如何查找和安装最新可再发行程序包的说明。 有关详细信息和可再发行程序包的链接,请参阅最新支持的 Visual C++ 下载

最新的可再发行程序包和合并模块与使用 Visual Studio 2015 及更高版本生成的代码兼容。 由 2015 之前的 Visual Studio 版本生成的代码需要单独的可再发行程序包。

何时使用合并模块

合并模块仅在有限的情况下适用:

  • 出于策略原因,无法安装或要求单独的可再发行程序包,
  • 代码需要库的特定 bug 兼容版本,
  • 代码仅面向一个平台,并且不依赖多个版本的 DLL,
  • 你打算定期维护已部署的代码,以便库保持最新。

使用合并模块时,必须使用库更新来跟踪并定期维护应用程序。 否则,最终会强制客户端在运行代码或保持安全之间选择。

在何处查找合并模块文件

在 Visual Studio 2022 和 2019 中,合并模块文件是 Visual Studio 安装程序中名为 C++ <版本> 可再发行程序包 MSM 的可选可安装组件的一部分。 合并模块默认在 Visual Studio 2017 和 Visual Studio 2015 中的 C++ 安装过程中安装。 在 Visual Studio 2022 中安装时,你将在 %VCINSTALLDIR%Redist\MSVC\v143\MergeModules 中找到 Visual C++ 可再发行程序包合并模块。 在最新版本的 Visual Studio 2019 中,合并模块位于 %VCINSTALLDIR%Redist\MSVC\v142\MergeModules 中。 在 Visual Studio 2019 和 Visual Studio 2017 中,它们也位于 %VCToolsRedistDir%MergeModules 中。 在 Visual Studio 2015 中,它们位于 Program Files [(x86)]\Common Files\Merge Modules 中。 有关详细信息和可再发行程序包合并模块列表的链接,请参阅重新分发 Visual C++ 文件

另请参阅

重新分发 Visual C++ 文件