2009-11-13 7 views
6

En créant mon installateur WiX j'ai rencontré un problème en essayant de fermer une application avant d'installer la mise à niveau. Voici un exemple de la façon dont je tente de le faire.Fermeture d'une application à l'aide WiX

<util:CloseApplication Id="CloseServe" CloseMessage="yes" Target="server.exe" ElevatedCloseMessage="yes" RebootPrompt="no"/> 
<InstallExecuteSequence>  
    <Custom Action="WixCloseApplications" After="RemoveExistingProducts" /> 
    <RemoveExistingProducts After="InstallInitialize"/> 
    <Custom Action='LaunchApplication' After='InstallFinalize'/> 
    <!--<Custom Action='StopServer' Before='RemoveExistingProducts'/>--> 
</InstallExecuteSequence> 

En utilisant cet exemple l'application ne finissent par la fermeture, mais l'installation se bloqué à ce moment-là et effectue ensuite un retour en arrière. Serait-ce dû au fait que l'exe est retiré avant d'essayer de le fermer? J'ai essayé de changer la séquence afin que RemoveExistingProducts soit effectué après les WixCloseApplications mais il me donne alors un code d'erreur 2613.

+2

Ce serait génial si vous expliquez ce que l'erreur a finalement été - la réponse acceptée suggère simplement de générer un journal de l'installation ... –

+0

Il a été si longtemps que je ne peux honnêtement pas me rappeler le problème complet. La journalisation m'a aidé à le retrouver. Il était une question de séquence où on ne pouvait pas fermer le programme de cette façon enlever avant les produits existants, mais vous ne pouviez pas retirer les produits existants si elle était en cours d'exécution. Un bootstrapper m'a aidé à résoudre ce problème. –

Répondre

7

Vous pourriez essayer de vous connecter l'installation et voir ce que vous pouvez traquer à partir de là. Essayez d'exécuter le programme d'installation de la console de commande comme ceci:

msiexec.exe /i [msi filename] /log [filepath\logfilename.log] 
0

Je suppose que vous devez fermer l'application en cours d'exécution le plus tôt possible dans le InstallExecuteSequence, et certainement avant InstallInitialize qui démarre le Windows Installer transaction qui apporte des modifications au système.

En outre, vous devez exécuter la même ApplicationClose opération dans le InstallUISequence, si bien que l'application est fermée pendant que vous faire défiler les menus d'installation interactive. L'ensemble InstallUISequence est ignorée lorsque vous installez en silence, si vous avez besoin dans le InstallExecuteSequence ainsi.

Soyez conscient que vous pouvez déclencher accidentially rollback dans une action personnalisée en renvoyant un code de sortie/code d'erreur msiexec.exe interprète comme une erreur. Si la réalisation de l'action personnalisée n'est pas cruciale, j'éteins la vérification des erreurs pour permettre l'installation de continuer. Dans ce cas, qui cause juste un redémarrage à être nécessaire.

Si ce que vous essayez de fermer ou de fermer est un le service, MSI a des fonctions intégrées pour faire face à ce via les éléments ServiceControl et ServiceInstall (and others).

Questions connexes