WixExitEarlyWithSuccess カスタムアクション

WixExitEarlyWithSuccess カスタムアクションは、値 ERROR_NO_MORE_ITEMS をリターンする以外何もしない 即時カスタムアクションです。この戻り値 は Windows Installer に、.msi 中の残りのアクションすべてをスキップさせ インストール成功を 示すプロセス終了コードをリターンさせます。

このカスタムアクションは、セットアップに実際には何もインストールせずに終了して欲しいけれど コールしているプロセスに成功をリターンして欲しい場面で 役に立ちます。このタイプの動作が役に 立つ よくあるシナリオは、 major upgrades をインプリメントする .msi に関する 順番の狂ったインストールシナリオです。 ユーザーが バージョン2の .msi をインストールしていて そこにバージョン1をインストール しようとしている時、バージョン2が既にインストールされている事を検出し セットアップを何も インストールせずに終了させ 成功をリターンさせるのに、このカスタムアクションは Upgrade table と連携して用いられ得ます。もし どれかのアプリケーションがバージョン1の .msi を再配布しても、ユーザーがシステム上にバージョン2の .msi をインストールしていてさえ それらのインストールプロセスは働き続けるでしょう。

MSI で WixExitEarlyWithSuccess カスタムアクションを使用するのに とる必要のあるステップが 3つあります:

Step 1: プロジェクトに WiX utilities extensions library を追加する

WiX の WixExitEarlyWithSuccess についてのサポートは、WiX extension library に含まれていて、 使用する前に プロジェクトに追加されなければ なりません。もし コマンドラインで WiX を使って いるなら、light.exe のコマンドラインに 以下を追加する必要があります:

light.exe myproject.wixobj -ext WixUtilExtension

もし Votive を使っているなら、Add Reference dialog を使って extension を追加する事が できます:

  1. Visual Studio で Votive プロジェクトを 開く
  2. ソリューション エクスプローラーでプロジェクトを右クリックして、Add Reference... を選ぶ
  3. リストから WixUtilExtension.dll アセンブリを選んで、追加をクリックする
  4. Add Reference dialog を 閉じる

Step 2: WixExitEarlyWithSuccess カスタムアクションへの参照を 追加する

WixExitEarlyWithSuccess カスタムアクションへの参照を 追加するには、WiX セットアップ オーサリングで 以下をインクルードします:

<CustomActionRef Id="WixExitEarlyWithSuccess" />

これは WiX に、MSI に WixExitEarlyWithSuccess カスタムアクションを追加させ、 FindRelatedProducts アクション ( 英語 ) の後に いますぐスケジュールに入れさせ、 NEWERVERSIONDETECTED と名付けられたプロパティが セットされている場合だけ実行する様に 条件付けさせます。

Step 3: 適切な時に NEWERVERSIONDETECTED プロパティを定義する ロジックを追加する

WixExitEarlyWithSuccess を望んだ時に実行させる為に、インストーラーに NEWERVERSIONDETECTED プロパティを作成するロジックを追加しなければなりません。上で述べられたメジャーアップグレード の例をインプリメントするには、以下のように Upgrade エレメントを追加できます:

<Upgrade Id="!(loc.Property_UpgradeCode)">
  <UpgradeVersion Minimum="$(var.ProductVersion)" OnlyDetect="yes" Property="NEWERVERSIONDETECTED" />
</Upgrade>