带有条件的WiX跳过对话框

时间:2011-12-09 14:44:24

标签: dialog wix

我有一个自定义对话框,在选择InstallPEDatabase功能时显示。 以下是MyEditConfig是我的自定义对话框的序列部分:

  <Publish Dialog="MyCustomizeDlg" Control="Next" Event="NewDialog" Value="MyEditConfigDlg"><![CDATA[(&CreatePEDatabase=3)]]></Publish>
  <Publish Dialog="MyCustomizeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg"><![CDATA[NOT(&CreatePEDatabase=3)]]></Publish>

  <Publish Dialog="MyEditConfigDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
  <Publish Dialog="MyEditConfigDlg" Control="Back" Event="NewDialog" Value="MyCustomizeDlg">1</Publish>

  <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MyCustomizeDlg" Order="1">NOT CreatePEDatabase = 3 AND NOT Installed OR WixUI_InstallMode = "Change"</Publish>
  <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MyEditConfigDlg" Order="2">CreatePEDatabase = 3 AND NOT Installed OR WixUI_InstallMode = "Change"</Publish>
  <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="3">Installed AND NOT PATCH</Publish>
  <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="4">Installed AND PATCH</Publish>

像这样,它适用于选择功能,然后显示MyEditConfigDlg,如果未选择功能,则不会显示。问题是,当我从我的自定义对话框中单击下一步并转到VerifyReadyDlg并从那里点击返回时,它会将我带回MyCustomizeDlg而不是MyEditConfigDlg.我知道存在问题条件,但我不知道是什么。

1 个答案:

答案 0 :(得分:3)

“feature”CreatePEDatabase的语法被指定为“property”(没有前缀的变量)。您需要使用&符号作为前缀。就像现在一样,测试要求“NOT(属性CreatePEDatabase = 3)”这是真的,因为该属性不存在且不等于任何东西。 如果将语法更改为某个功能,则会对其进行正确评估。

以下是MSI引擎使用的语法的一个很好的总结(它读取WiX生成的MSI文件): http://msdn.microsoft.com/en-us/library/aa368012(VS.85).aspx

此外,您可以省略“Order”值,因为这些值仅用于相同条件的多个对话框的特殊情况。您的测试将使每种情况都独一无二。