WixUI_InstallMode プロパティを使用して、WIX インストーラー条件の非常に奇妙な動作に直面しました。要素の条件と要素の条件ではまったく異なる動作をします。たとえば、この条件は、削除または修復オプションが使用された場合にのみ、MaintenanceTypeDlg に正しくつながります。
<UI>
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="6"><![CDATA[WixUI_InstallMode = "Repair" OR WixUI_InstallMode = "Remove"]]></Publish>
</UI>
これは前のダイアログを表示しませんが:
<UI>
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="6"><![CDATA[WixUI_InstallMode = Repair OR WixUI_InstallMode = Remove]]></Publish>
</UI>
唯一の違いは、2 番目の例では "Repair" と "Remove" の値に引用符がないことです。通常のように見えるので、WIX ソースのように値を引用符で囲む必要があります。
しかし、さらに 2 つの例を考えてみましょう。
<InstallExecuteSequence>
<Custom Action="AssertUserCredentials" After="InstallValidate"><![CDATA[WixUI_InstallMode<>"Remove"]]></Custom>
</InstallExecuteSequence>
この条件は常に true です。そのため、削除モードでは、完全に予期しないカスタム アクションが起動されます。なぜ解雇されるのですか?
そして再び引用符なしの例:
<InstallExecuteSequence>
<Custom Action="AssertUserCredentials" After="InstallValidate"><![CDATA[WixUI_InstallMode<>Remove]]></Custom>
</InstallExecuteSequence>
これは引用符なしで正常に動作し、アンインストール モードでカスタム アクションを実行しないようになりました。
私の場合、この 2 つの条件の使用法はまったく同じロジックですが、動作はまったく逆です。誰が何が起こるか説明できますか?