WIX: Não consigo lidar com a caixa de seleção “Iniciar um aplicativo após instalação” = 0
-
20-09-2019 - |
Pergunta
Estou fazendo uma instalação com o WIX que possui uma caixa de seleção "Lançar um aplicativo após a instalação". O objetivo é ter uma reação ao estabelecer a caixa de seleção, bem como desativar a caixa de seleção. Caso a caixa de seleção esteja definida, preciso executar um aplicativo. Caso a caixa de seleção não esteja definida, preciso executar o mesmo aplicativo, mas com o argumento da linha de comando.
Aqui está uma parte do meu 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>
Uma instalação inicia o aplicativo quando o iniciamento do iniciativo está definido. Mas ele não o executa caso a caixa de seleção não esteja definida.
Solução
Eu encontrei uma resposta. Parece que a propriedade da caixa de seleção não é igual a 0 quando desmarcada. Basta alterar a condição "LaunchApPONEXIT = 0" com "não iniciar openPonexit" resolve a situação.
Tornar padrão:
<Property Id="LAUNCHAPPONEXIT" Value="1" />
Em seguida, corrija as condições (corrigidas com o comentário 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>
Outras dicas
Uma caixa de seleção não tem valor quando desmarcado, então, em vez de usar a notação 1/0, você pode simplesmente usar
LAUNCHAPPONEXIT
e
Not LAUNCHAPPONEXIT
Você precisa adicionar uma ação personalizada inicializa para sua propriedade,
<CustomAction ID="InitLAUNCHAPPONEXIT"
Property="LAUNCHAPPONEXIT"
Value="0"
Return="check"/>
e depois adicione -o para instalar a caixa de diálogo de saída ou simplesmente adicione sua propriedade ao produto <Property Id="LAUNCHAPPONEXIT" Value="0" />
.