Visual C++ での共有 C ランタイム コンポーネントの再配布

この記事では、Visual C++ で共有 C ランタイム コンポーネントを再配布する方法について説明します。

元の製品バージョン:Visual Studio、.NET Framework
元の KB 番号: 326922

概要

Microsoft Visual Studio でアプリケーションをビルドし、アプリケーションで C ランタイム ライブラリ (CRT) を使用する場合は、次の一覧から適切な CRT ダイナミック リンク ライブラリ (DLL) をアプリケーションに配布します。

  • Microsoft Visual C++ 2008 の Msvcr90.dll
  • Microsoft Visual C++ 2005 年の Msvcr80.dll
  • Microsoft .NET Framework 1.1 を使用Microsoft Visual C++ .NET 2003 の Msvcr71.dll
  • Microsoft .NET Framework 1.0 を使用した .NET 2002 Microsoft Visual C++の 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 をインストールします。 これは、開発者にとって便利な方法としてインストールされます。 それ以外の場合、共有 CRT とリンクする Visual C++ でビルドされたすべてのプロジェクトでは、デバッグと実行のためにビルド ディレクトリ内の DLL のコピーが必要です。 Visual C++ 2005 および Visual C++ 2008 は、Windows XP 以降のオペレーティング システムに Windows サイド バイ サイド アセンブリとして CRT DLL をインストールします。 Windows 2000 では、サイド バイ サイド アセンブリはサポートされていません。 Windows 2000 では、CRT DLL が System32 ディレクトリにインストールされます。

共有 CRT ライブラリを必要とするアプリケーションを CRT DLL に配布する場合は、DLL ファイルを直接配布するのではなく、Visual C++ に含まれる CRT.msm マージ モジュールを使用することをお勧めします。

Windows サイド バイ サイド アセンブリ

Visual C++ 2005 での Msvcr80.dll と Visual C++ 2008 での Msvcr90.dll は、Windows 2000 以外の Windows サイド バイ サイド アセンブリとして再配布されます。 これらのバージョンの CRT は、Visual Studio に含まれる Vcredist_x86.exe アプリケーションを実行することで、ターゲット コンピューターにインストールできます。 x64 および IA-64 プラットフォーム用のインストーラーもあります。 代わりに、Visual Studio で提供されている CRT msm マージ モジュールを使用して、CRT インストーラーを独自のセットアップ アプリケーションにパッケージ化できます。 これにより、CRT は、サポートされているオペレーティング システム上のディレクトリにインストールされているため、すべてのアプリケーションで \windows\winsxs 共有アセンブリとして使用できるようになります。

関連情報