Ho due finestre di dialogo personalizzate (più le richieste ExitDlg
, FatalErrorDlg
, ecc.), La prima imposta una proprietà utilizzando un controllo Modifica e la seconda mostra questa proprietà utilizzando un controllo di testo. Ecco il codice di significato:Inserimento di azioni personalizzate tra finestre di dialogo (InstallUISequence) in WiX
<Dialog Id="DialogA" ...>
<Control Id="ControlEdit" Type="Edit" Property="MY_PROPERTY" .../>
<Control Id="ControlNext" Type="PushButton" ...>
<Publish Event="EndDialog" Value="Return" /></Control>
</Dialog>
E poi la seconda finestra di dialogo:
<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>
E la sequenza di azioni:
<InstallUISequence>
<Show Dialog="DialogA" Before="MyCustomAction" />
<Custom Action="MyCustomAction" Before="DialogB" />
<Show Dialog="DialogB" Before="ExecuteAction" />
</InstallUISequence>
l'azione personalizzata cambia il valore di MY_PROPERTY
. Il mio problema è come rendere il pulsante Indietro in DialogB
tornare a DialogA
. Usare NewDialog
è semplice, ma poi non riesco a ottenere l'azione personalizzata da eseguire tra le finestre di dialogo, o posso?
modifica - 2013-05-02
Dopo la risposta da @caveman_dick, ho provato a cambiare il DialogA
quasi come ha detto, ma invece di utilizzare EndDialog
, ho cambiato a Action="NewDialog" Value="DialogB"
. Ma ora l'azione personalizzata non viene chiamata. Se rimuovo l'evento Pubblica per andare alla finestra di dialogo successiva, viene chiamata la CA. Se parto come @caveman_dick ha detto, non posso tornare a DialogA
da DialogB
.
modifica - 2013-05-02
Dopo aver cercato nel libro WiX 3.6: Uno sviluppatore Guida a Windows Installer XML, ho trovato la seguente: "se si dispone di più di una Pubblica evento, devono avere dichiarazioni condizionali come testo interno, altrimenti tutti gli eventi semplicemente non saranno pubblicati. "
Quindi la risposta da @caveman_dick è corretto, se non che è necessario modificare la seguente:
<Publish ...>1</Publish>
Ho provato il tuo approccio ma l'azione non viene chiamata. Invece di usare 'EndDialog', sto usando' NewDialog' per poter tornare indietro. Se rimuovo l'evento 'NewDialog', viene chiamata l'azione. – Marlos
Come modificato in questione, è necessario aggiungere la condizione per far funzionare più eventi, ma la risposta è parzialmente corretta e risolve il problema. – Marlos
Stavo proprio per modificare la risposta con quello. Ho copiato male il tuo codice. Grazie per il riconoscimento però! :) –