WiX: non può gestire “Avviare un'applicazione dopo l'installazione” checkbox = 0
-
20-09-2019 - |
Domanda
Sto facendo un'installazione con WiX che hanno una "Avviare un'applicazione dopo l'installazione" casella di controllo. L'obiettivo è quello di avere una reazione sul settting la casella di controllo, nonché sulla disinserimento la casella di controllo. Nel caso in cui la casella di controllo è impostato, ho bisogno di eseguire un'applicazione. Nel caso in cui la casella di controllo non è impostato, ho bisogno di eseguire la stessa applicazione, ma con l'argomento da riga di comando.
Ecco una parte del mio script WiX.
<CustomAction Id="StartConfigManagerOnExit"
FileKey="ParamsShower.exe"
ExeCommand=""
Execute="immediate"
Impersonate="yes"
Return="asyncNoWait" />
<CustomAction Id="StartUpgradeConfigOnExit"
FileKey="ParamsShower.exe"
ExeCommand="/upgrade"
Execute="immediate"
Impersonate="yes"
Return="asyncNoWait" />
<UI>
<Publish Dialog="ExitDialogEx"
Control="Finish"
Order="1"
Event="DoAction"
Value="StartConfigManagerOnExit">LAUNCHAPPONEXIT = 1</Publish>
<Publish Dialog="ExitDialogEx"
Control="Finish"
Order="1"
Event="DoAction"
Value="StartUpgradeConfigOnExit">LAUNCHAPPONEXIT = 0</Publish>
<Publish Dialog="ExitDialogEx"
Control="Finish"
Event="EndDialog"
Value="Return"
Order="999">1</Publish>
<Dialog Id="ExitDialogEx"
Width="370"
Height="270"
Title="[ProductName] Setup">
<Control Id="LaunchCheckBox"
Type="CheckBox"
X="135"
Y="190"
Width="220"
Height="40"
Property="LAUNCHAPPONEXIT"
Hidden="yes"
CheckBoxValue="1"
Text="Launch an app">
<Condition Action="show">NOT Installed</Condition>
</Control>
</Dialog>
<InstallUISequence>
<Show Dialog="ExitDialogEx"
OnExit="success" />
</InstallUISequence>
<AdminUISequence>
<Show Dialog="ExitDialogEx"
OnExit="success" />
</AdminUISequence>
</UI>
Un impianto si avvia l'applicazione quando LaunchCheckBox è impostato. Ma non viene eseguito nel caso in cui la casella di controllo non è impostato.
Soluzione
ho trovato una risposta. Sembra proprietà casella di controllo non è uguale a 0 quando incontrollato. Basta cambiare la condizione "LAUNCHAPPONEXIT = 0" con "NOT LAUNCHAPPONEXIT" risolve la situazione.
Fai di default:
<Property Id="LAUNCHAPPONEXIT" Value="1" />
Poi correggere le condizioni (corretto con il commento di Sascha):
<Publish Dialog="ExitDialogEx" Control="Finish" Order="1" Event="DoAction" Value="StartConfigManagerOnExit">LAUNCHAPPONEXIT</Publish>
<Publish Dialog="ExitDialogEx" Control="Finish" Order="1" Event="DoAction" Value="StartUpgradeConfigOnExit">NOT LAUNCHAPPONEXIT</Publish>
Altri suggerimenti
Una casella di controllo non ha alcun valore a tutti quando incontrollato, in modo piuttosto che usare la notazione 1/0 si può utilizzare semplicemente
LAUNCHAPPONEXIT
e
Not LAUNCHAPPONEXIT
È necessario aggiungere inizializzare un'azione personalizzata per la vostra proprietà,
<CustomAction ID="InitLAUNCHAPPONEXIT"
Property="LAUNCHAPPONEXIT"
Value="0"
Return="check"/>
e poi aggiungerlo al InstallUISequence prima finestra di dialogo spettacolo uscita, o semplicemente aggiungere la vostra proprietà per <Property Id="LAUNCHAPPONEXIT" Value="0" />
prodotto.