[MSI Trouble Shoot] 64 ビットのマネージ カスタム動作から System.BadImageFormatException 例外がスローされる

こんにちは、Visual Studio サポートチームのオオカワです。今日は、Visual Studio のセットアップ プロジェクトで 64bit のカスタム動作を追加した際に、BadImageFormatException がスローされてインストールが正常に完了しないという案件について、対処方法をご案内いたします。

事象

セットアップ プロジェクトに 64 ビットのマネージ カスタム動作を追加した。インストール作業の途中で、64 ビットのマネージ カスタム動作を実行するときに、BadImageFormatException 例外が発生する。

原因

Visual Studio のセットアッププロジェクトは、マネージ カスタム動作 DLL が 32bit 版でも 64bit 版でも、32bit 版の InstallUtilLib.dll をインストーラーに組み込みます。このため、カスタム動作の実行時に64bit 版のカスタム動作を実行しようとしているにもかかわらず 32bit 版の .NET Framework が読み込まれ、結果として例外が発生します。

対処策

InstallUtilLib.dll を手動で 64bit 版に差し替える必要があります。

事前準備

Windows SDK に付属している Orca エディタをインストールします。当該ツールのインストーラーは、たとえば Visual Studio 2010 がインストールされた環境であれば、”Program Files” ディレクトリ配下の “Microsoft SDKs\Windows\v7.0A\Bin\Orca.msi” に存在します。

作業手順

  1. Windows インストーラー SDK の Orca で結果の .msi を開きます。
  2. Binary テーブルを選択します。
  3. レコード InstallUtil の [Binary Data] というセルをダブルクリックします。
  4. [Read binary from filename] が選択されていることを確認し、[Browse] ボタンをクリックします。
  5. %WINDIR%\Microsoft.NET\Framework64\<カスタム動作が対象とする .NET Framework のバージョン番号> のディレクトリを参照します。
  6. InstallUtilLib.dll を選択します。
  7. [開く] ボタンをクリックします。
  8. [OK] ボタンをクリックします。

インストール途中に BadImageFormatException が発生する場合には、本件に該当する疑いが高い状況かと存じます。もしよろしければ、InstallUtilLib.dll の差し替えをお試しいただければ幸いです。

Visual Studio サポート チーム
オオカワ