在 Visual C++ 中重新分发共享 C 运行时组件

本文介绍如何在 Visual C++ 中重新分发共享 C 运行时组件。

原始产品版本:Visual Studio,.NET Framework
原始 KB 编号: 326922

摘要

在 Microsoft Visual Studio 中生成应用程序,并且应用程序使用 CRT (CRT) 的 C 运行时库时,请将以下列表中的相应的 CRT 动态链接库 (DLL) 分发到应用程序:

  • 2008 Microsoft Visual C++Msvcr90.dll
  • 2005 Microsoft Visual C++ Msvcr80.dll
  • microsoft .NET Framework 1.1 Microsoft Visual C++ .NET 2003 Msvcr71.dll
  • Microsoft .NET Framework 1.0 Microsoft Visual C++ .NET 2002 的 Msvcr70.dll

对于 Msvcr70.dll 或 Msvcr71.dll,应将 CRT DLL 安装到应用程序文件目录中。 不能将这些文件安装到 Windows 系统目录中。 对于 Msvcr80.dll 和 Msvcr90.dll,应将 CRT 作为 Windows 并行程序集安装。

DLL 冲突

共享 CRT DLL 过去已由 Microsoft 作为共享系统组件分发。 在未安装正确 CRT DLL 版本的计算机上运行链接到不同版本的 CRT 的应用程序时,可能会导致问题。 它通常称为 DLL 冲突 问题。

为了解决此问题,CRT DLL 不再被视为系统文件,因此请将 CRT DLL 与依赖于它的任何应用程序一起分发。 由于它不再是系统组件,因此请使用其他特定于应用程序的代码将其安装到应用程序 Program Files 目录中。 这会阻止应用程序使用可能安装在系统路径上的 CRT 库的其他版本。

Visual C++ .NET 2003 或 Visual C++ .NET 2002 在开发系统上的 System32 目录中安装 CRT DLL。 安装是为了方便开发人员。 否则,使用 Visual C++ 生成且与共享 CRT 链接的所有项目都需要生成目录中的 DLL 副本进行调试和执行。 Visual C++ 2005 和 Visual C++ 2008 将 CRT DLL 作为 Windows 并行程序集安装在 Windows XP 和更高版本的操作系统上。 Windows 2000 不支持并行程序集。 在 Windows 2000 上,CRT DLL 安装在 System32 目录中。

在 CRT DLL 中分发需要共享 CRT 库的应用程序时,建议使用 Visual C++ 附带的 CRT.msm 合并模块,而不是直接分发 DLL 文件。

Windows 并行程序集

Visual C++ 2005 的 Msvcr80.dll 和 Visual C++ 2008 的 Msvcr90.dll 作为 Windows 并行程序集重新分发,Windows 2000 除外。 可以通过运行 Visual Studio 附带的 Vcredist_x86.exe 应用程序,在目标计算机上安装这些版本的 CRT。 还有适用于 x64 和 IA-64 平台的安装程序。 相反,可以使用 Visual Studio 随附的 CRT msm 合并模块将 CRT 安装程序打包到你自己的安装应用程序中。 这将使 CRT 作为共享程序集提供给所有应用程序,因为它安装在 \windows\winsxs 支持的操作系统上的目录中。

References