Wixのインストール時のみ実行などの判定条件

Wixでインストール時にのみ実行させたいケース、アンインストール時にのみ実行させたいケースなどなどの条件がわかりにくいので、ちょっとまとめてみます。

認識が間違っているなどあればご指摘ください。

インストール

NOT Installed

アンインストール

REMOVE="ALL"

以上を踏まえた上でより複雑な条件

インストール時にチェック、アンインストール時チェック不要パターン1

http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/read_a_registry_entry.html

に載っている例

<Condition Message="This application requires .NET Framework 2.0. Please install the .NET Framework then run this installer again.">
    <![CDATA[Installed OR NETFRAMEWORK20]]>
</Condition>

インストール時に「.NET Framework 2.0.」がインストールされているかチェック。アンインストール時にはチェックは不要となるケース。

インストール済(Installed) or .NET Framework 2.0.インストール済(NETFRAMEWORK20)以外の時に(!による否定)Conditionが発動

http://stackoverflow.com/questions/6716246/dont-understand-wix-conditions-boolean-logic

にも解説が載っています。

インストール時にチェック、アンインストール時チェック不要パターン2

<Condition Message="This application is installed.">
    <[CDATA[NOT Installed AND NOT REMOVE]]>
</Condition>

実はアンインストールには2パターンあるケース

プログラムのアンインストールまたは変更から削除する場合

<InstallExecuteSequence>
  <Custom Action=' ... ' After=' ... '>REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE</Custom>
</InstallExecuteSequence>

メジャーアップデート時に古いバージョンを削除する場合

<InstallExecuteSequence>
  <Custom Action=' ... ' After=' ... '>UPGRADINGPRODUCTCODE</Custom>
</InstallExecuteSequence>

http://stackoverflow.com/questions/17411913/how-can-i-perform-a-custom-action-in-wix-that-only-executes-on-install-or-uninst

詳しい対応表が以下に載っています。

http://stackoverflow.com/questions/320921/how-to-add-a-wix-custom-action-that-happens-only-on-uninstall-via-msi/321874#321874