Comment puis-je modifier mon MSI pour qu'il n'exige pas la fermeture de TOUTES les autres applications en cours ? C'est assez drôle, si mon application est fermée manuellement avant la désinstallation, elle ne demandera pas de fermer outlook, firefox, etc.
Réponses
Trop de publicités?L'invite est affichée automatiquement par l'action InstallValidate, vous ne pouvez donc pas modifier ce comportement. Vous pouvez l'empêcher en utilisant une action personnalisée qui ferme votre application avant InstallValidate.
En général, cela se fait en envoyant WM_CLOSE à la fenêtre principale de l'application (l'application doit gérer ce message pour que cela fonctionne).
Les autres applications (Outlook, Firefox, etc.) sont également affichées dans l'invite, car Windows Installer n'est pas très doué pour détecter les applications en cours d'exécution. Il vérifie essentiellement les dépendances de fichiers (par exemple, si plusieurs applications utilisent les mêmes DLL ou le même runtime), ce qui peut donner lieu à des faux positifs.
MSI traitera automatiquement les fichiers verrouillés à l'aide d'un scénario de redémarrage. Le fait de demander la fermeture des applications est une tentative d'empêcher ce redémarrage. Vous pouvez supprimer le redémarrage, mais le fichier ne sera alors remplacé qu'après le redémarrage.
Quel est exactement le comportement que vous recherchez ?
BTW, lecture recommandée :
De là, suivez le lien vers InstallValidate et System Reboots.
Comme l'a écrit mrnx, cette vérification des applications en cours d'exécution s'effectue au cours de l'opération suivante InstallerValider . Mais arrêter les applications avant cela n'est pas une bonne idée. D'autres vérifications peuvent échouer et MSI doit être en mesure de rétablir le système dans l'état où il se trouvait avant l'exécution de MSI, y compris les applications en cours d'exécution.
De plus, ces contrôles sont "immédiats" et non "différés".
IMO Les actions personnalisées visant à arrêter les applications doivent être exécutées juste avant " Supprimer les fichiers " et comme " différé "pour s'assurer qu'il s'exécute en tant qu'administrateur.
Pour empêcher l'affichage de la boîte de dialogue, la propriété suivante peut être utilisée :
<Property Id="MSIRESTARTMANAGERCONTROL" Value="Disable" />
D'après ce que j'ai compris, il retombera toujours sur Fichiers en cours d'utilisation dialogue pendant Supprimer les fichiers s'ils sont encore utilisés à ce moment-là.