Вставка пользовательского действия между диалогами (InstallUISequence) в WiX

У меня есть два пользовательских диалоговых окна (плюс необходимые ExitDlg, FatalErrorDlgи т. д.), первый устанавливает свойство с помощью элемента управления "Редактировать", а второй показывает это свойство с помощью элемента управления "Текст". Вот значимый код:

<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", Но теперь Custom Action не вызывается. Если я удаляю событие Publish, чтобы перейти к следующему диалоговому окну, вызывается CA. Если я уйду, как сказал @caveman_dick, я не смогу вернуться DialogA от DialogB,


редактировать - 2013-05-02

После поиска в книге WiX 3.6: Руководство разработчика по XML для установщика Windows, я обнаружил следующее: "если у вас более одного события публикации, они должны иметь условные операторы в качестве внутреннего текста. В противном случае все события просто не будут быть опубликованным."

Таким образом, ответ от @caveman_dick правильный, за исключением того, что вам нужно изменить следующее:

<Publish ...>1</Publish>

1 ответ

Решение

Вместо планирования пользовательских действий в 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 условие элемента должно явно оцениваться как true для запуска, поэтому добавьте "1" как текст Publish элементы.

Другие вопросы по тегам