8

我有两个自定义对话框(加上所需的ExitDlg,FatalErrorDlg等),第一个使用 Edit 控件设置属性,第二个使用 Text 控件显示此属性。这是有意义的代码:

<Dialog Id="DialogA" ...>
  <Control Id="ControlEdit" Type="Edit" Property="MY_PROPERTY" .../>
  <Control Id="ControlNext" Type="PushButton" ...>
    <Publish Event="EndDialog" Value="Return" /></Control>
</Dialog>

然后是第二个对话框:

<Dialog Id="DialogB" ...>
  <Control Id="ControlText" Type="Text" Text="[MY_PROPERTY]" .../>
  <Control Id="ControlBack" Type="PushButton" ...>
    <Publish Event="EndDialog" Value="Return" /></Control>
  <Control Id="ControlNext" Type="PushButton" ...>
    <Publish Event="EndDialog" Value="Return" /></Control>
</Dialog>

以及动作顺序:

<InstallUISequence>
   <Show Dialog="DialogA" Before="MyCustomAction" />
   <Custom Action="MyCustomAction" Before="DialogB" />
   <Show Dialog="DialogB" Before="ExecuteAction" />
</InstallUISequence>

自定义操作更改 的值MY_PROPERTY。我的问题是如何使返回按钮DialogB返回到DialogA. 使用NewDialog很简单,但是我无法在对话框之间执行自定义操作,或者我可以吗?


编辑 - 2013-05-02

在@caveman_dick 的回答之后,我试图改变DialogA几乎就像他说的那样,但我没有使用EndDialog,而是改为Action="NewDialog" Value="DialogB". 但是现在没有调用自定义操作。如果我删除 Publish 事件以转到下一个对话框,则调用 CA。如果我按照@caveman_dick 所说的那样离开,我将无法DialogADialogB.


编辑 - 2013-05-02

WiX 3.6: A Developer's Guide to Windows Installer XML中搜索后,我发现以下内容:“如果您有多个 Publish 事件,它们必须有条件语句作为它们的内部文本。否则,所有事件根本不会发表。”

所以@caveman_dick 的答案是正确的,只是你需要更改为以下内容:

<Publish ...>1</Publish>
4

1 回答 1

13

InstallUISequence您可以在单击按钮时发布它,而不是在其中安排自定义操作:

<Dialog Id="DialogA" ...>
   <Control Id="ControlEdit" Type="Edit" Property="MY_PROPERTY" .../>
   <Control Id="ControlNext" Type="PushButton" ...>
       <Publish Event="DoAction" Value="MyCustomAction">1</Publish>
       <Publish Event="EndDialog" Value="Return">1</Publish>
   </Control>
</Dialog>

编辑:Publish元素的条件需要明确评估为真才能运行,因此添加"1"Publish元素的文本。

于 2013-05-02T11:36:21.777 回答