Викс:Не удается установить флажок “Запустить приложение после установки” = 0
-
20-09-2019 - |
Вопрос
Я выполняю установку с помощью WiX, у которого есть флажок "Запускать приложение после установки".Цель состоит в том, чтобы получить реакцию на установку флажка, а также на снятие флажка.В случае, если флажок установлен, мне нужно запустить приложение.В случае, если флажок не установлен, мне нужно запустить то же приложение, но с аргументом командной строки.
Вот часть моего скрипта 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>
Установка запускает приложение, когда установлен флажок LaunchCheckBox.Но он не запускает его, если флажок не установлен.
Решение
Я нашел ответ.Похоже, что свойство checkbox не равно 0, когда оно снято.Простое изменение условия "LAUNCHAPPONEXIT = 0" на "НЕ LAUNCHAPPONEXIT" решает ситуацию.
Установить значение по умолчанию:
<Property Id="LAUNCHAPPONEXIT" Value="1" />
Затем исправьте условия (исправлено с комментарием саши):
<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>
Другие советы
Флажок вообще не имеет значения, когда он снят, поэтому вместо использования обозначения 1/0 вы можете просто использовать
LAUNCHAPPONEXIT
и
Not LAUNCHAPPONEXIT
Вам нужно добавить пользовательское действие инициализации для вашего свойства,
<CustomAction ID="InitLAUNCHAPPONEXIT"
Property="LAUNCHAPPONEXIT"
Value="0"
Return="check"/>
а затем добавьте его в InstallUISequence перед отображением диалогового окна выхода или просто добавьте свое свойство в product <Property Id="LAUNCHAPPONEXIT" Value="0" />
.