重要
在 Visual Studio 2019 及更高版本中,已弃用 Visual C++ 可再发行文件的合并模块。 不建议将其用于应用程序部署。 Windows 更新无法使用合并模块更新安装的可再发行组件文件,因为检测机制取决于知道安装包的详细信息。
Visual C++ 可再发行组件包对于每个版本都是已知的,但使用合并模块的包是用户生成的。 Microsoft 无法知道用户生成的包的详细信息。 相反,我们建议使用 Visual C++ Redistributable 包的集中部署。 集中部署在 Windows %SYSTEMROOT%\system32\ 文件夹中安装可再发行文件供所有应用程序和用户使用。 可再发行包的集中部署使 Microsoft 能够独立维护运行库文件。 应用的卸载不能破坏其他也使用中央部署的应用程序。
使用可再发行组件包进行中央部署时,不负责在应用程序维护过程中跟踪和更新运行时库。 Microsoft更新服务会为你更新这些库。 否则,对运行时库文件的更新需要更新和重新部署 安装程序。 在这样做之前,你的应用可能容易受到 bug 或安全问题的影响。
Visual Studio 包括用于每个 Visual C++ 组件的合并模块(.msm 文件),这些组件已获许可可随应用程序重新分发。 每个目标平台都有不同版本的合并模块。 当合并模块被编译为Windows安装程序文件时,它将启用将Visual C++可再发行组件部署到该特定平台。 不能在一个安装程序中包含相同动态链接库(DLL)的不同版本的合并模块。 在你的安装文件中,请指定合并模块是应用程序的先决条件。
可以将合并模块用于中央部署或本地部署。 除非用户具有管理员权限,否则无法安装集中部署的文件。 本地部署可能允许非管理员安装和运行应用,但代价是独立的可维护性。
如果尝试在较新的现有库上集中部署较旧的合并模块,则安装服务将报告错误。 应编写安装程序以正常处理此故障,而不显示错误消息。 尽管出现此故障,代码仍可成功部署和运行。 有关详细信息,请参阅 Visual Studio 版本之间的 C++ 二进制兼容性。
如果仅将代码部署为 安装程序,建议不要在安装程序中包含合并模块。 相反,如果未找到所需的可再发行库,则向用户报告失败。 在失败对话框中,包括有关如何查找和安装最新可再发行组件包的说明。 有关可再发行包的详细信息和链接,请参阅 最新支持的 Visual C++ 下载。
最新的可再发行组件包和合并模块与使用 Visual Studio 2015 及更高版本生成的代码兼容。 2015 年之前由 Visual Studio 版本生成的代码需要单独的可再发行组件包。
何时使用合并模块
合并模块仅在有限的情况下适用:
- 出于策略原因,无法安装或要求单独的可再发行组件包。
- 代码需要库的特定 bug 兼容版本。
- 代码仅面向一个平台,并且不依赖于多个版本的 DLL。
- 你打算定期为已部署的代码提供服务,以便库保持最新状态。
使用合并模块时,必须使用库更新来跟踪并定期维护应用程序。 否则,最终会强制客户端在运行代码或保持安全之间选择。
在何处查找合并模块文件
在 Visual Studio 2022 和 2019 中,合并模块文件是Visual Studio安装程序中名为 C++ <version> Redistributable MSM 的可选可安装组件的组成部分。 默认情况下,合并模块在 Visual Studio 2017 和 Visual Studio 2015 中作为 C++ 安装的一部分进行安装。 在 Visual Studio 2022 中安装合并模块时,可以在 %VCINSTALLDIR%Redist\MSVC\v143\MergeModules 中找到 Visual C++ 可再发行组件合并模块。
在 2019 Visual Studio 的最新版本中,合并模块位于 %VCINSTALLDIR%Redist\MSVC\v142\MergeModules 中。 在 2019 Visual Studio 和 2017 Visual Studio 中,它们也位于 %VCToolsRedistDir%MergeModules 中。 在 2015 Visual Studio中,它们位于 Program Files [(x86)]\Common Files\Merge Modules 中。 有关详细信息和可再发行合并模块列表的链接,请参阅 重新分发 Visual C++ 文件。
相关内容
- 重新分发 Visual C++ 文件