通用 CRT 部署

从 Visual Studio .NET 到 Visual Studio 2013,C++ 编译器和工具的每个主版本都包含一个新的独立版本的 Microsoft C 运行 (CRT) 库。 CRT 的这些独立版本彼此独立,并在不同程度上彼此不兼容。 例如,Visual Studio 2012 使用的 CRT 库是第 11 版,名为 msvcr110.dll,而 Visual Studio 2013 使用的 CRT 是第 12 版,名为 msvcr120.dll。 从 Visual Studio 2015 开始,这种情况不会再出现。 Visual Studio 2015 及更高版本的 Visual Studio 都使用一个通用 CRT。

通用 CRT (UCRT) 是 Microsoft Windows 操作系统组件。 它包含在 Windows 10 或更高版本以及 Windows Server 2016 或更高版本的操作系统中。 在仍获得外延支持的较旧操作系统上使用 Windows 更新,就可以使用 UCRT。 通用 CRT 的本地部署受支持,但有一些限制。

集中部署

集中安装通用 CRT 的首选方法是使用 Microsoft Windows 更新。 通用 CRT 是所有支持的 Microsoft Windows 操作系统的推荐更新,所以默认情况下,大多数计算机在常规更新过程中都会安装它。 通用 CRT 的初始版本为 KB2999226KB3118401 中进行了后续更新,其中包括各种 bug 修补程序,另外还有其他更新,其中包括更多 bug 修补程序和新功能。 有关最新更新,请在 support.microsoft.com 中搜索“通用 C 运行时”或“通用 CRT”。

并非所有 Microsoft Windows 计算机都使用 Windows 更新定期安装更新,有些计算机可能不会安装所有推荐的更新。 为支持在这些计算机上使用通过 Visual Studio 2015 及更高版本的 C++ 工具集生成的应用程序,通用 CRT 可再发行文件可用于脱机分发。 这些可再发行文件可从上述任一知识库链接下载。 通用 CRT 可再发行组件要求计算机已更新到当前服务包。 举个例子,Windows 7 的可再发行组件仅安装到 Windows 7 SP1 上,而不会安装到 Windows 7 RTM 上。

通用 CRT 是 C++ 库的基本依赖项。 Visual C++ 可再发行程序包 (VCRedist) 在尚未安装通用 CRT 的计算机上安装通用 CRT 的初始版本(版本 10.0.10240)。 此版本足以满足 C++ 库依赖项。 如果应用程序依赖于较新版本的通用 CRT,则必须使用 Windows 更新将计算机完全更新。 或者,显式安装该版本的 UCRT。 最好是在安装 VCRedist 之前使用 Windows 更新 或 MSU 安装通用 C 运行时。 此安装顺序有助于避免多次必须进行的重启。

并非所有操作系统都有资格通过 Windows 更新获得最新的通用 C 运行时。 在 Windows 10 或 Windows 11 上,集中部署的版本与操作系统的版本匹配。 若要进一步更新通用 C 运行时,必须更新操作系统。 对于 Windows Vista 到 Windows 8.1,最新发布的通用 C 运行时基于 Windows 10 周年更新(版本 10.0.14393)。

本地部署

支持通用 CRT 的本地部署(但由于性能和安全原因不推荐)。 根据计算机体系结构,本地部署的 DLL 作为 Windows SDK 的一部分包含在 Windows Kits\10\Redist\ucrt\DLLs 子目录中。 所需的 DLL 包括 ucrtbase.dll 和一组名为 api-ms-win-*.dll 的 APISet 转发器 DLL。 每个操作系统所需的 DLL 集各不相同。 强烈建议在本地进行部署时包括所有 DLL。

本地部署有两个需要注意的限制:

  • 在 Windows 10 和 Windows 11 上,即使应用程序包含通用 CRT 的应用程序本地副本,也始终使用系统目录中的通用 CRT。 即使本地副本较新,也是如此,因为通用 CRT 在 Windows 10 及更高版本上是核心操作系统组件。

  • Windows 8 之前的 Windows 版本:如果通用 CRT 位于除主应用可执行文件目录之外的任何位置,则不能使用插件在本地打包。 在这种情况下,APISet 转发器 DLL 无法成功解析 ucrtbase.dll。 以下为建议的替代解决方案:

    • 静态链接通用 CRT,
    • 集中部署通用 CRT,或
    • 将通用 CRT 文件放在与应用相同的目录中。

Microsoft Windows XP 上的部署

Visual Studio 2015 和 Visual Studio 2017 工具集继续支持用于 Microsoft Windows XP 的软件开发。 有一个用于 Microsoft Windows XP 的通用 CRT 版本。 Microsoft Windows XP 操作系统不再获得主要支持或外延支持。 因此,在 Microsoft Windows XP 上集中部署通用 CRT 不同于其他操作系统。

在 Windows XP 上安装 Visual C++ 可再发行程序包时,它会直接将通用 CRT 及其所有依赖项安装到系统目录中。 它不安装或依赖于任何 Windows 更新。 可再发行的合并模块(即 Microsoft_VC<version>_CRT_<target>.msm 文件)执行相同操作。

Windows XP 上通用 CRT 的本地部署与其他支持的操作系统相同。

重要

最新 Visual C++ Redistributable for Visual Studio 2015、2017、2019 和 2022 中不再提供对 Windows XP 的运行时库支持。 支持 Windows XP 的最后一个可再发行程序包是版本 16.7(文件版本为 14.27.29114.0)。 如果使用更高版本的可再发行程序包部署 Windows XP 应用或应用更新到更高版本的可再发行程序包,应用则不会运行。 若要了解详细信息以及如何获取支持 Windows XP 的可再发行程序包版本,请参阅配置适用于 Windows XP 的程序

另请参阅