配置方法の選択

更新 : 2007 年 11 月

ほとんどの場合、Visual C++ アプリケーションを配置するには Windows インストーラを使用します。Visual Studio でサポートされている配置方法とその代替策の詳細については、「配置ストラテジの選択」および「配置の代替手段」を参照してください。ClickOnce を使用して Visual C++ ネイティブ アプリケーションを配置することは、Visual Studio 2005 ではサポートされていません。ただし、コマンド ラインでは、ClickOnce を使用して Visual C++ アプリケーションを配置できます。詳細については、「Visual C++ アプリケーションの ClickOnce 配置」を参照してください。

side-by-side 共有アセンブリである Visual C++ ライブラリ

Visual Studio 2005 は Visual C++ ライブラリを共有 side-by-side アセンブリとしてインストールします。既定では、Visual Studio 2005 でビルドされたすべてのアプリケーションは、マニフェストを持つ分離アプリケーションとしてビルドされます。このマニフェストは、リソースとして埋め込まれるか、または最終的なバイナリに外部ファイルとして付属します。Visual C++ がインストールされていないコンピュータ上で Visual C++ アプリケーションを実行するには、アプリケーションと共に Visual C++ アセンブリが再配布され、ターゲット コンピュータにインストールされることが必要な場合があります。

Visual C++ ライブラリの再配布

Visual C++ の DLL を再配布する場合、次の 3 つの方法があります。

  1. Visual C++ 再配布可能マージ モジュールを使用し、特定の Visual C++ ライブラリを共有 side-by-side アセンブリとしてネイティブ アセンブリ キャッシュ (WinSxS フォルダ) にインストールします。主に、Visual C++ のライブラリを再配布する場合にお勧めします。このフォルダにアクセスするには、管理権限を持つユーザーがインストーラ アプリケーションを実行する必要があります。詳細については、「マージ モジュールを使用した再配布」を参照してください。配置例については、「方法 : セットアップおよび配置プロジェクトを配置する」を参照してください。

  2. Visual C++ 再頒布可能パッケージ (VCRedist_x86.exe、VCRedist_x64.exe、VCRedist_ia64.exe) を使用し、Visual C++ のすべてのライブラリを共有 side-by-side アセンブリとして、ネイティブ アセンブリ キャッシュ (WinSxS フォルダ) にインストールします。このパッケージは、%WindowsSdkDir%\Bootstrapper\Packages\ フォルダにインストールされているほか、Microsoft のダウンロード サイト「Microsoft Visual C++ 2005 再頒布可能パッケージ (x86)」からもダウンロードできます。アプリケーションが Visual C++ Express でビルドされている場合、または、すべての Visual C++ ライブラリを一度に配置することが求められる場合は、このパッケージを使用して Visual C++ ライブラリを再配布することをお勧めします。このパッケージの使用例については、「方法 : XCopy を使用して配置する」を参照してください。

  3. Program Files\Microsoft Visual Studio 8\VC\Redist ディレクトリにあるファイルを使用し、特定の Visual C++ アセンブリを、アプリケーションのプライベート アセンブリとしてインストールします。管理者権限のないユーザーでもアプリケーションをインストールできるようにする場合や、アプリケーションを共有場所から実行できるようにする場合は、この方法をお勧めします。例については、「方法 : XCopy を使用して配置する」を参照してください。

ms235316.alert_note(ja-jp,VS.90).gifメモ :

Windows Server 2000 では、再配布可能マージ モジュールを使用して Visual C++ ライブラリを再配布する方法のみが推奨およびサポートされています。

再配布可能マージ モジュールを使用して Visual C++ ライブラリをインストールすると、これらのアセンブリは共有 side-by-side アセンブリとしてネイティブ アセンブリ キャッシュ (WinSxS フォルダ) に配置されます。このフォルダにアクセスするには、管理権限を持つユーザーがインストーラ アプリケーションを実行する必要があります。

管理者権限を持たないユーザーがインストールを実行すると、インストールにおいて Visual C++ アセンブリの配置が失敗するため、アプリケーションが実行されません。また、製品によっては、ユーザー単位でのインストールが許可されていますが、マージ モジュールでは、共有の場所にライブラリがインストールされるため、システムのすべてのユーザーが影響を受けます。このような状況、またはこれと似た状況で、必要なアセンブリを特定のユーザーのアプリケーションのプライベート side-by-side アセンブリとしてインストールする方法がサポートされています。

この方法では、依存アセンブリの DLL とマニフェストを含むフォルダをアプリケーションのローカル フォルダにコピーするだけです。オペレーティング システムのローダーは、アプリケーションの実行時でも、最初に WinSxS フォルダで依存アセンブリを検索します。ただし、該当するアセンブリを検出できなかった場合、このローダーはこのサブディレクトリからプライベート アセンブリを読み込みます。

Visual C++ ライブラリの再配布は、適切に行う必要があります。再配布の方法が不適切だと、そのライブラリに依存するアプリケーションで、実行時にランタイム エラーが発生します。発生する可能性のあるエラーとその解決方法の一覧については、「C/C++ 分離アプリケーションおよび side-by-side アセンブリのトラブルシューティング」を参照してください。

マニフェストの必要性

マニフェストを使用せずにビルドされた C/C++ アプリケーションの再配布はサポートされていません。Visual C++ ライブラリを C/C++ アプリケーションで使用するためには、両者を結び付けるマニフェストが必要です。Visual C++ 2005 でビルドしたすべての C/C++ バイナリには、Visual C++ ライブラリとの依存関係を記述したマニフェストが含まれている必要があります。これは、Visual Studio のプロジェクトでは既定の設定であり、オブジェクト コードから最終的なバイナリにバインドするリンカの既定の動作です。

あらゆる場合において、マニフェストは内部に埋め込むことをお勧めします。ただし、EXE ファイルの場合は、マニフェストを外部に置くこともできます (サポートはされていますが、お勧めはしません)。

アプリケーションのローカル フォルダ、または環境変数で指定されたフォルダ内に依存 DLL を必要とするアプリケーションは、セキュリティに関する攻撃に対して脆弱になるおそれがあります。また、このようなアプリケーションに対しては、配置の後でサービスを提供することが難しくなります。

静的なリンクよりも望ましい動的なリンク

Visual C++ ライブラリに静的にリンクする C/C++ アプリケーションを再配布することはお勧めしません。一般的に、プログラムを Visual C++ ライブラリに静的にリンクすると、アプリケーションのパフォーマンスが大幅に向上すると誤って認識されています。しかし、ほとんどの場合、Visual C++ ライブラリを動的に読み込むことによるパフォーマンスへの影響は微々たるものです。さらに、静的にリンクした場合は、アプリケーションの作成者も Microsoft も、アプリケーションおよびその依存するライブラリにサービスを提供できません。たとえば、特定のライブラリに静的にリンクしたアプリケーションが、そのライブラリの新しいバージョンを持つクライアント コンピュータ上で実行される場合を考えます。この場合、アプリケーションは以前のバージョンのライブラリからコードを使用するため、セキュリティ強化など、ライブラリの改良による恩恵を受けることができません。C/C++ アプリケーションを作成するときは、サービスを提供する状況について十分に考慮したうえで、依存するライブラリに静的にリンクするかどうかを判断し、可能な場合は動的なリンクを使用することを強くお勧めします。

参照

概念

配置ストラテジの選択

配置例

その他の技術情報

配置 (C++)

Windows インストーラ配置の概要

ClickOnce の配置