WIX WixUI_InstallMode属性和引用奇怪的行为

时间:2012-11-02 10:39:23

标签: wix conditional-statements

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

唯一的区别是第二个示例中的“修复”和“删除”值没有引号。所以它看起来很正常,我们应该将值放在引号中,就像在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>

现在可以正常使用,不带引号,也不会在卸载模式下执行自定义操作

至于我,这两种用法条件完全相同,但行为完全相反。 有人可以解释会发生什么吗?

0 个答案:

没有答案