Как программно перейти к следующему экрану в установщике MSI с помощью пользовательского действия?

#c #wix #windows-installer

#c #wix #установщик Windows

Вопрос:

У меня есть пользовательский диалог WiX ConfigDlg с моими собственными элементами управления в нем:

 lt;Fragmentgt;   lt;UI Id="My_WixUI_Mondo"gt;   lt;Publish Dialog="ConfigDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg"gt;1lt;/Publishgt;  lt;Publish Dialog="ConfigDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg"gt;1lt;/Publishgt;   lt;/UIgt;  lt;/Fragmentgt;  

Мне нужно запрограммировать кнопку «Далее», чтобы проверить, что пользователь ввел в мой ConfigDlg, и отключить экран «Далее», если такая проверка не удалась. Поэтому я изменил свой XML, чтобы вызвать свое idCA_NextBtn пользовательское действие как таковое:

 lt;Fragmentgt;   lt;UI Id="My_WixUI_Mondo"gt;   lt;Publish Dialog="ConfigDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg"gt;1lt;/Publishgt;  lt;Publish Dialog="ConfigDlg" Control="Next" Event="DoAction" Value="idCA_NextBtn"gt;1lt;/Publishgt;   lt;/UIgt;  lt;/Fragmentgt;  

где:

 lt;Binary Id="caBinDll" SourceFile="$(var.SourceFldrBld)ca_Installer.dll" /gt; lt;CustomAction Id="idCA_NextBtn" Execute="immediate" BinaryKey="caBinDll" DllEntry="caNextButton" Return="check" /gt;  

Моя caNextButton функция в библиотеке пользовательских действий вызывается, но я не уверен, как перейти к следующему экрану (или VerifyReadyDlg ) с него:

 extern "C" UINT APIENTRY caNextButton(MSIHANDLE hInstall) {  return ERROR_SUCCESS; }  

Или для имитации?

 lt;Publish Dialog="ConfigDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg"gt;1lt;/Publishgt;  

Ответ №1:

Элементы управления могут иметь несколько уровней управления (элементов публикации), и они обрабатываются по порядку. Что вы делаете, так это сначала вызываете пользовательское действие и устанавливаете для него значение SomeProperty равным null или 1, а затем получаете два взаимоисключающих события.

опубликовать пользовательское имя действия doAction Условие 1 (верно/всегда)

опубликовать SpawnDialog CustomBrandedMessageBoxDialog Условие, а не какое-либо свойство

опубликуйте новый каталог верифицированиедля условия некоторого свойства