Lorsque vous désinstallez ou mettez à jour un programme, vous pouvez être confronté à un processus en cours d’exécution ne vous permettant pas de poursuivre.
Vous obtenez alors une fenêtre générée par Installshield demandant à l’utilisateur de fermer ce processus.
Cette boîte de dialogue est créée par le moteur InstallShield après que l’action standard « CostFinalize » soit terminée.
Vous avez donc deux choix, soit laisser cette boite de dialogue (impossible si vous faite vos désinstallation en mode silencieux) soit décider de tuer vous-même ce processus avant que la boite de dialogue ne s’affiche.
InstallShield vous propose plusieurs méthodes pour le kill process.
Méthode 1
Cette méthode n’est valable que depuis la version 2012 Sprint. Elle utilise la « custom Actions » Kill Process :
-
Dans un projet :
Créer une nouvelle « custom action » de type New Kill Process
- Dans un MST
Vous ne disposez pas de l’option en direct. Il vous faut créer la fonction en choisissant Custom Action Wizard.
Un assistant s’ouvre :
Donner lui un nom
En type: “Call a function in a Windows Installer dynamic-link library”
En Location: “Stored in the Binary table”
La source doit être la Dll SetAllUsers.dll et cibler KillProcess
Vous pouvez aussi utilisez :KillProcessByID, KillProcessDeferred et KillProcessByIDDeferred
Faites ensuite votre choix du processing. Attention si vous choisissez Synchronous (Check exit code) vous risquez un arrêt de votre MSI si le ou les processus ne sont pas en mémoire.
Le séquencer en fonction de vos besoins, dans l’exemple il est positionné très tôt dans la séquence pour un package silencieux
Vous obtenez que ce soit dans un MST ou via un projet la vue suivante (En mode projet n’oubliez pas de modifier les options de séquençage et de processing
Dans Property, ajouter la propriété ISTerminateProcesses et y remplir la liste des processus à tuer séparé par un point-virgule (;)
Méthode 2
Construire votre propre « Kill-Process action » personnalisée
Si vous utilisez des versions antérieures à InstallShield 2012 Sprint, ou si vous avez besoins d’utilisé le caractère *, vous devez créer votre propre action personnalisée.
Bien sûr vous pouvez utiliser un script de type vbs ou InstallScript dans votre custom action, pour vérifier les processus en cours.
Mais plus simplement vous pouvez construire cette « custom action Kill Process » à l’aide du clic droit « New EXE \ Path referencing a directory »
Créer une nouvelle action personnalisée
Sélectionnez « WindowsFolder »
Séquence correctement : Attention le moteur InstallScript doit résoudre le répertoire de travail « WindowsFolder » vous devez donc séquencer après « ResolveSource » dans «Install UI Sequence » et après « CostFinalize » dans « Install Exec Sequence »
Entrez le « taskkill /F /IM XXXXXX »
Testé et validé 🙂
Merci pour le tutoriel très explicite et utile.
Je dois faire une custom action, car j’ai une application qui a la désinstallation a besoin que Outlook soit fermé . Je voulais reprendre l’exemple du kill process dans le forum et faire l’exercice de créer une boite dialogue interactive avec un bouton pour killer le process Outlook pour que l’utilisateur puisse sauvegarder ses travaux en cours avant de poursuivre la désinstallation . Dans un package MSI ou placer cette boite de dialogue afin qu’elle s’affiche lorsque l’on démarrer la désinstallation de l’application ?
Bonjour,
Je vous répond sans faute demain, je n’ai pas installshield sous la main avant.
Cordialement
Bonjour,
Je vous reprends contact pour savoir si vous avez eu le temps de regarder concernant la question que j’avais posé sur la Custom action permettant d’effectuer la désinstallation de mon logiciel avec une fenêtre qui s’affiche en interaction avec l’utilisateur seulement à la désinstallation l’invitant à Fermer Outlook et Internet Explorer car ils sont en cours d’utilisation…. En vous remerciant par avance pour votre aide.
Bonjour,
Je vous ai contacté par mail. N’hésitez pas a revenir vers moi.
Cordialement