2013-05-02 14 views
6

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> 

risposta

8

Invece di pianificazione l'azione personalizzata nella InstallUISequence è possibile pubblicare sul pulsante di scatto:

<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> 

EDIT: le condizioni del elemento Publish deve valutare in modo esplicito su true per eseguire, in modo da aggiungere "1" come il testo delle Publish elementi.

+0

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

+0

Come modificato in questione, è necessario aggiungere la condizione per far funzionare più eventi, ma la risposta è parzialmente corretta e risolve il problema. – Marlos

+0

Stavo proprio per modificare la risposta con quello. Ho copiato male il tuo codice. Grazie per il riconoscimento però! :) –