1

使用 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>

唯一的区别是第二个示例中的“Repair”和“Remove”值不带引号。所以它看起来很正常,我们应该将值放在引号中,就像在 WIX 源中一样。

但是让我们再考虑两个例子:

<InstallExecuteSequence>
  <Custom Action="AssertUserCredentials" After="InstallValidate"><![CDATA[WixUI_InstallMode<>"Remove"]]></Custom>
</InstallExecuteSequence>

这个条件总是成立的。所以在删除模式下,自定义操作被触发,这是完全出乎意料的。为什么会被解雇?

又是一个不带引号的例子:

<InstallExecuteSequence>
  <Custom Action="AssertUserCredentials" After="InstallValidate"><![CDATA[WixUI_InstallMode<>Remove]]></Custom>
</InstallExecuteSequence>

这现在可以在没有引号的情况下正常工作,并且不会在卸载模式下执行自定义操作

对我来说,这两种条件的用法是完全一样的逻辑,但行为却完全相反。谁能解释会发生什么?

4

0 回答 0