Ho riscontrato un problema durante un aggiornamento principale. Il programma di installazione include un servizio e su un aggiornamento ho ricevuto un popup che dice che è necessario un riavvio per completare il processo di installazione.WiX: interrompere il servizio prima di RemoveExistingProducts OPPURE eseguire CustomAction elevato per interrompere il processo prima RemoveExistingProducts
Per evitare questo comportamento, in realtà devo solo interrompere il servizio prima che venga eseguito RemoveExistingProducts
(piuttosto InstallValidate
).
Il MajorUpgrade
viene inserito dopo InstallInitialize
e il pacchetto ha InstallPrivileges="elevated"
.
Ho due casi:
Caso 1: Il servizio è installato per ServiceInstall
via
<Component Id="myservice_Service" Guid="*">
<File Id="myservice.exe" KeyPath="yes" Vital="yes"
Source="SourceDir\bin\myservice.exe"/>
<ServiceInstall Id="myservice_ServiceInstall" Type="ownProcess"
Vital="yes" Name="myservice" DisplayName="myservice Service"
Description="myservice Service" Start="auto" Account=".\LocalSystem"
ErrorControl="ignore" Interactive="no" Arguments="--run"/>
<ServiceControl Id="myservice_ServiceControl" Name="myservice" Wait="yes" Stop="uninstall"/>
</Component>
Il ServiceControl
non si ferma il servizio prima InstallValidate
si chiama. Anche quando dici Stop = "entrambi". Quindi appare il popup. Si noti che il servizio non è stato avviato dall'installer.
ragionevoli che ho trovato (estratto):
- How does one stop a Windows service to do an upgrade install?
- Upgrade a Windows Service without Uninstalling
Caso 2: Il servizio viene installato da un CustomAction
(ci sono alcuni ragioni per non farlo via ServiceInstall
). In questo caso devo chiamare un eseguibile per fermare il servizio ("myservice.exe --stop"). Per questo è complicato, poiché a causa di ICE63 non è consentito programmare un CustomAction
prima che venga chiamato lo RemoveExistingProducts
. Quindi, come posso raggiungere questo comunque?
messaggi Finora ho letto come:
- WiX call app on uninstall before User prompt "close manually"
- WiX close application before uninstall - close open applications message
- Close a systemtray app before uninstalling using wix
- http://t53456.windows-development-wix-user.wintalk.us/stop-a-service-before-uninstall-t53456.html
un exe di avvio automatico non è un opzione, in quanto ho bisogno di produrre un semplice MSI.
ho trovato simile problema senza risposta qui: Wix Installer Problem: Why does RestartManager mark Service as RMCritical and not RMService
Possibile duplicato del [servizio di interruzione Wix su disinstallazione/aggiornamento: impedire "riavvio popup" (situazione del file in uso)] (https://stackoverflow.com/questions/31787804/wix-stop-service-on- uninstall-upgrade-prevent-restart-popup-file-in-use-situ) – BartoszKP