Вставка пользовательского действия между диалогами (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
элементы.