配置のシナリオ例

更新 : 2007 年 11 月

いずれも MFC でビルドされた、MyApplication.exe と MyLibrary.DLL があるとします。MyApplication.exe は MyLibray.DLL に依存し、両方とも共有 DLL の MFC を使用します。また、両方ともネイティブ バイナリか混合 (/clr) バイナリです。最も簡単なケースでは、両方が既定の設定のウィザードを使用して生成されます。ここでの例では、Visual Studio がインストールされていない別のコンピュータに、このアプリケーションを配置する方法について説明します。ここでは主にアプリケーションのリリース バージョンの配置について説明しますが、デバッグ バージョンを配置するために必要な変更についても示します。

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

デバッグ Visual C++ プログラムの再配布は、このエンド ユーザー使用許諾契約書 (EULA) では許可されていません。ただし、デバッグ用に一時的に配置することはできます。Visual Studio 2008 のソフトウェア ライセンス条項 EULA を参照してください。

初期セットアップ

このシナリオでは 3 台のコンピュータを考慮する必要があります。

開発用コンピュータは、アプリケーションがビルドされるコンピュータです。Visual Studio 2005 (STD、PRO、または TS) がインストールされています。

2 台の配置ターゲット コンピュータには、Visual Studio 2005 はインストールされていません。配置ターゲット 1 は、アプリケーションと依存先とのマニフェスト ベースのバインディングをサポートするオペレーティング システム (Windows XP Home Edition、Windows XP Professional、Windows Server 2003、Windows Vista) を実行しているコンピュータです。配置ターゲット 2 では、このサポートがないオペレーティング システム (Windows 2000) が実行されています。

開発用コンピュータでアプリケーションをビルドし、それを 2 台のターゲット コンピュータに配置して、実行します。

準備

別のコンピュータで実行するための Visual C++ バイナリをビルドした場合は、そのバイナリが依存している DLL を確認する必要があります。そのための便利なツールは Dependency Walker です。この場合、Visual C++ DLL、特に CRT および MFC を考慮する必要があります。デバッグ バージョンの MyApplication.exe を Visual Studio で開いて、そのリソースを参照すると、RT_MANIFEST リソースが見つかります。これはバイナリ内に埋め込まれたマニフェストです。それをエクスポートして XML ファイルとして開くと、次のように表示されます。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.xxxxx.yy" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugMFC" version="9.0.xxxxx.yy" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

これは、このアプリケーションが次のアセンブリに依存していることを意味します。

  • アセンブリ Microsoft.VC90.DebugCRT、バージョン 9.0.xxxxx.yy for x86

  • アセンブリ Microsoft.VC90.DebugMFC、バージョン 9.0.xxxxx.yy for x86

  • アセンブリ Microsoft.Windows.Common-Controls、バージョン 6.0.0.0 for x86

リリース バイナリでは、次のように表示されます。

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.xxxxx.yy" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.MFC" version="9.0.xxxxx.yy" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

これは、このアプリケーションが次のアセンブリに依存していることを意味します。

  • アセンブリ Microsoft.VC90.CRT、バージョン 9.0.xxxxx.yy for x86

  • アセンブリ Microsoft.VC90.MFC、バージョン 9.0.xxxxx.yy for x86

  • アセンブリ Microsoft.Windows.Common-Controls、バージョン 6.0.0.0 for x86

同様のマニフェストが、MyLibrary.dll でも、デバッグとリリースの両方で表示されます。マニフェスト ID は EXE では 1、DLL では 2 であることに注意してください。また、バイナリに埋め込まれない場合、マニフェストは <バイナリ名>.<拡張子>.manifest として保存され、内容は同じです。

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

Visual Studio 2005 は、マニフェストなしの C++ アプリケーションのビルド、および %PATH% を使用した従来の方法での Visual C++ ライブラリへのバインドをサポートしていません。さらに、Visual C++ DLL はこれを検出し、DLL による読み込みを禁止して、サポートされていないシナリオおよび必要な変更を示すことができます。/manifest:no を使用したり、マニフェストを削除したりしないでください。

配置方法

この例では、インストール中にユーザーが指定できる %TARGET% フォルダに MyApplication.exe をインストールします。MyLibrary.dll は %TARGET%\MyLibrary にインストールされ、\MyLibrary がパスに追加されます。

VC++ アプリケーションを配置するための次の 2 つの方法を確認します。

  1. セットアップ/配置プロジェクトを使用してのセットアップ パッケージのビルド。

  2. XCopy による配置。

各方法で、次の 2 つのシナリオについて説明します。

  1. 共有アセンブリとしての Visual C++ ライブラリの配置。

  2. プライベート アセンブリとしての Visual C++ ライブラリの配置。

シナリオ 1 では、1 つの Visual C++ DLL が WinSxS フォルダにあります。シナリオ 2 では、Visual C++ DLL は 2 つあり、アプリケーション EXE のローカル フォルダと DLL のローカル フォルダにインストールされます。

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

Windows 2000 では、アプリケーションのローカル フォルダに配置すると使用時に問題が発生するため、シナリオ 2 はサポートされません。

参照

処理手順

方法 : セットアップおよび配置プロジェクトを配置する

方法 : XCopy を使用して配置する

概念

配置例