WiX: ne peut pas gérer « Lancer une application après l'installation » case = 0
-
20-09-2019 - |
Question
Je fais une installation avec WiX qui ont une case à cocher « Lancer une application après l'installation ». L'objectif est d'avoir une réaction sur settting la case à cocher ainsi que sur MHS la case à cocher. Dans le cas où la case à cocher est réglée, je dois exécuter une application. Dans le cas où la case à cocher est pas définie, je dois exécuter la même application, mais avec l'argument de ligne de commande.
Voici une partie de mon 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>
Une installation démarre l'application lorsque LaunchCheckBox est réglé. Mais il ne fonctionne pas dans le cas où la case à cocher est pas définie.
La solution
Je l'ai trouvé une réponse. On dirait que la propriété de case à cocher n'est pas égal à 0 lorsque décochée. Il suffit de changer la condition "LAUNCHAPPONEXIT = 0" avec "NOT LAUNCHAPPONEXIT" permet de résoudre la situation.
Désigner par défaut:
<Property Id="LAUNCHAPPONEXIT" Value="1" />
Ensuite, corriger les conditions (corrigées avec le commentaire de 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>
Autres conseils
Une case à cocher n'a pas de valeur du tout quand décochée, donc plutôt que d'utiliser la notation 1/0 vous pouvez simplement utiliser
LAUNCHAPPONEXIT
et
Not LAUNCHAPPONEXIT
Vous devez ajouter initialiser une action personnalisée pour votre propriété,
<CustomAction ID="InitLAUNCHAPPONEXIT"
Property="LAUNCHAPPONEXIT"
Value="0"
Return="check"/>
et puis l'ajouter à InstallUISequence avant de dialogue de sortie du spectacle, ou simplement ajouter votre propriété au produit <Property Id="LAUNCHAPPONEXIT" Value="0" />
.