Windows Installer でカスタムアクションを使用する際の注意

2010 年最初のネタは、Windows Installer です。
インストーラーは極力シンプルな構造にするのは鉄則ですが、どうしても内部処理を行うために
カスタムアクションを使用しなければならないという場合、重要な注意事項があります。

  • 前提条件
    Windows Installer のカスタムアクションで、EXE や DLL を使用する
  • OS
    Windows Vista 以降の OS すべて(クライアント系、サーバー系共に)

この条件に当てはまる場合には、使用する EXE や DLL は必ず、ランタイムライブラリをスタティックリンク(/MT オプション)
したものを使うようにしてください。

この理由ですが、カスタムアクションの EXE や DLL が、再頒布インストールするランタイムを使用してしまう場合、
Windows Installer のインストール処理はトランザクションになっているために、カスタムアクションが動作する際には
再頒布インストールする C ランタイムが使える状態(再頒布インストールするランタイムのマージモジュールが
コミットされていない)になっていない場合があるからです。

エラー 1935。  An error occurred during the installation of assembly component {9DA4DC8A-9731-3F0E-8BD5-FC17CA6848AD}. HRESULT: 0x800736FD. assembly interface: IAssemblyCacheItem, function: Commit, assembly name: policy.9.0.Microsoft.VC90.CRT,publicKeyToken="1fc8b3b9a1e18e3b",type="win32-policy",version="9.0.30729.4148",processorArchitecture="x86"
MSI (s) (54:54) [11:22:00:570]: 製品 : 俺様サンプル — エラー 1935。  An error occurred during the installation of assembly component {9DA4DC8A-9731-3F0E-8BD5-FC17CA6848AD}. HRESULT: 0x800736FD. assembly interface: IAssemblyCacheItem, function: Commit, assembly name: policy.9.0.Microsoft.VC90.CRT,publicKeyToken="1fc8b3b9a1e18e3b",type="win32-policy",version="9.0.30729.4148",processorArchitecture="x86"

という具合に、1935 エラーが発生する可能性があります。

上記のブログは、VC++ 8.0 ですが、VC++ 9.0 でも同様です。
カスタムアクションを使用するのであれば、EXE や DLL を使うのではなく、VB スクリプトや J スクリプトを使う方がよいです。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。