Первый пост, так что надеюсь, что я не напортачу.
Я использую WiX для создания загрузчика MSI и setup.exe, который выполняет один из исполняемых файлов, развернутых проектом. Это работает, как и ожидалось для стандартных установок, но не работает при запуске из опции восстановления на MSI. Есть несколько причуд к этому:
- Это работает , если я запускаю setup.exe во второй раз. Это вызывает пользовательский интерфейс, который спрашивает, хотите ли вы изменить, восстановить или удалить приложение, и в конце он запускает exe-файл, как и ожидалось.
- Если я запускаю пакет msi второй раз, он показывает диалог изменения, исправления или удаления, но на соревновании он не запускает исполняемый файл, как мне хотелось бы.
- Если я использую опцию восстановления из «Установка и удаление программ», она не показывает диалог изменения, восстановления или удаления, вы просто видите индикатор прогресса на экране для кратчайших моментов (небольшое приложение) и тогда это останавливается.
Я пробовал несколько методов, чтобы попытаться заставить это работать, но все они сосредоточены на следующем.
У меня есть пользовательское действие, определенное следующим образом:
<CustomAction Id="Install" FileKey="ApplicationIWouldLikeToRun.exe" ExeCommand="/install" Execute="immediate" Impersonate="yes" Return="asyncNoWait" />
В конце моего раздела пользовательского интерфейса у меня есть обработчик событий на кнопке Fini sh:
<UI>
<UIRef Id="WixUI_InstallDir"/>
<!-- Run the Installer after the Exit Dialog -->
<Publish Dialog="ExitDialog" Control="Finish" Order="1" Event="DoAction" Value="Install">NOT Installed OR (REINSTALL=Complete) OR (REINSTALL=ALL)</Publish>
</UI>
В разделе я пробовал различные формы следующего, но ни один из них, похоже, не получил запускается в опции восстановления
<Custom Action="Install" After="InstallFinalize">REINSTALL ~= "Complete" OR REINSTALL ~= "ALL"</Custom>
Ниже приведен фрагмент кода для раздела GUI:
<!-- =================== -->
<!-- UPGRADE INFORMATION -->
<!-- =================== -->
<Upgrade Id="$(var.UpgradeCode)">
<UpgradeVersion Minimum="4.0.0" Maximum="$(var.Version)" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="yes" IncludeMaximum="no" />
<UpgradeVersion Minimum="$(var.Version)" OnlyDetect="yes" Property="NEWERVERSIONDETECTED" />
</Upgrade>
<Condition Message="A later version of [ProductName] is already installed. Setup will now exit.">NOT NEWERVERSIONDETECTED OR Installed</Condition>
<!-- ========== -->
<!-- GUI DESIGN -->
<!-- ========== -->
<UI>
<UIRef Id="WixUI_InstallDir"/>
<Property Id="ALLUSERS"><![CDATA[2]]></Property>
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />
<!-- Run the Installer after the Exit Dialog -->
<Publish Dialog="ExitDialog" Control="Finish" Order="1" Event="DoAction" Value="Install">NOT Installed OR (REINSTALL=Complete) OR (REINSTALL=ALL)</Publish>
</UI>
<WixVariable Id="WixUIDialogBmp" Value="bg_$(var.Manufacturer).bmp" />
<WixVariable Id="WixUIBannerBmp" Value="banner_$(var.Manufacturer).bmp" />
<!-- ============================================= -->
<!-- CUSTOM ACTIONS -->
<!-- ============================================= -->
<CustomAction Id="Install" FileKey="Installer.exe" ExeCommand="/install "[SourceDir]\packages"" Execute="immediate" Impersonate="yes" Return="asyncNoWait" />
<CustomAction Id="UninstallLicense" FileKey="Installer.exe" ExeCommand="/uninstalllicense" Execute="immediate" Impersonate="yes" />
<CustomAction Id="Uninstall" FileKey="Installer.exe" ExeCommand="/uninstall" Execute="immediate" Impersonate="yes" />
<CustomAction Id="Cleanup" FileKey="Installer.exe" ExeCommand="/cleanup" Execute="immediate" Impersonate="yes" />
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallInitialize"/>
<Custom Action="UninstallLicense" Before="Uninstall">Installed AND NOT UPGRADINGPRODUCTCODE AND (REMOVE="ALL")</Custom>
<Custom Action="Uninstall" Before="RemoveFiles">REMOVE ~= "Complete" OR REMOVE ~= "ALL"</Custom>
<Custom Action="Cleanup" After="Uninstall">REMOVE ~= "Complete" OR REMOVE ~= "ALL"</Custom>
<Custom Action="Install" After="InstallFinalize">REINSTALL ~= "Complete" OR REINSTALL ~= "ALL"</Custom>
</InstallExecuteSequence>