我使用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>
现在可以正常使用,不带引号,也不会在卸载模式下执行自定义操作。
至于我,这两种用法条件完全相同,但行为完全相反。 有人可以解释会发生什么吗?