Вставка пользовательского действия между диалогами (InstallUISequence) в WiX
у меня есть два пользовательских диалоговых окна (плюс необходимые ExitDlg
, FatalErrorDlg
, etc.), первый задает свойство с помощью элемента управления Edit, а второй показывает это свойство с помощью текстового элемента управления. Вот значимый код:
<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
просто, но тогда я не могу получить пользовательское действие, которое будет выполняться между диалогами, или могу?
edit-2013-05-02
после ответа от @caveman_dick я попытался изменить DialogA
почти как он сказал, но вместо использования EndDialog
поменял на Action="NewDialog" Value="DialogB"
. Но теперь Пользовательское действие не вызывается. Если я удалю событие публикации, чтобы перейти к следующему диалогу, то вызывается CA. Если я уйду как @caveman_dick сказал, Я не могу вернуться в DialogA
С DialogB
.
edit-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
элементы.