Comment arrêter un processus en cours d'exécution pendant un MSI de l'onu à installer?
Je suis en utilisant Wise Package Studio 7.0 SP2 sur Windows XP.
J'ai une MSI Enveloppé EXE d'installation qui va joyeusement sur l'installation de certains fichiers, puis en exécutant l'un des fichiers de l'installation, on peut se référer à app.exe.
Donc sur le "Exécution Différée" de l'onglet MSI Editor, j'ai dû ajouter les lignes:
If Not Installed then
Execute Installed Program app.exe (Action)
End
Ce veillé à ce que mon app.exe serait seulement sur l'installation et non pas lors d'une modification/réparation/suppression. Lorsque app.exe elle est exécutée, idéalement ajoute à la barre d'état système.
Je suis à la recherche de quelque chose qui va faire l'inverse, lors d'un enlèvement. Je veux arrêter de l'app.exe processus est donc le supprimer de la barre d'état système.
Actuellement, mon déménagement se débarrasse de tous les fichiers cependant l'app.exe reste en cours d'exécution et affiche toujours en haut dans la barre d'état système. J'ai regardé l'ajout de l'instruction conditionnelle:
If REMOVE~="ALL" then
*remove the app from the systray!*
End
L'instruction conditionnelle me permettra de faire quelque chose uniquement sur le retrait, cependant je ne suis pas sûr de la meilleure approche pour aller sur arrêter le processus. Y a t il une commande MSI je peux courir qui me permettra de le faire? Dois-je écrire mon propre .exe qui le fera?
OriginalL'auteur Mat Nadrofsky | 2008-10-30
Vous devez vous connecter pour publier un commentaire.
Il y a 6 mois nous avons été à l'aide de VBScript actions pour faire la même chose, puis à droite autour de l'heure que le SP3 a été libéré le objProcess.Terminate() fonctionnent de la même refusé de travailler sur des machines. Peu importe ce que nous avons fait, c'est juste gelé. Ce qui s'est passé autour de 10% de nos machines de test nous avons donc été contraints de trouver une solution alternative (qui sait combien de clients il pourrait avoir gelé!)
Ma première découverte a été le intégré (depuis Windows 2000) commande TASKKILL
par exemple:
TASKKILL /IM app.exe /F
mais qui semble utilisent les mêmes moyens de tuer un processus que nous avons utilisé dans VBScript, cette méthode serait également échouer.Alors maintenant, nous sommes à l'aide de la
pskill.exe
outil de sysinternals, vous devez utiliser le commutateur de ligne de commande pour supprimer l'accord de licence de l'invite, mais autre que cela, il a été le plus infaillible moyen de tuer un EXE en cours d'exécution que j'ai trouvé.Bien sûr, la meilleure solution serait de construire votre propre EXE ou DLL à faire ce qu'il vous arrive de connaître un peu de C++ 😉
OriginalL'auteur saschabeaumont
Viens de terminer les processus n'est pas suffisant, car qui n'a pas de nettoyer la Zone de Notification Windows (cependant, Windows nettoyer une icône avec aucun processus d'appariement lorsque la souris à côté plane au-dessus). Encore une raison de plus pourquoi la résiliation des applications brusquement est généralement préférable de réserver pour le débogage. Malheureusement, une bonne solution est aussi plus impliqués. Vous pouvez créer un événement nommé dans l'application et l'enregistrement d'une méthode de rappel à appeler lorsqu'il est réglé. Le rappel de fermeture de l'application. Ensuite, vous devez écrire une action personnalisée définir l'événement et a attendu jusqu'à ce que le processus terminé.
Si vous avez besoin de prendre en charge l'annulation (par exemple, l'utilisateur est invité qu'il a des modifications non enregistrées et décide de ne pas annuler), vous pouvez utiliser un autre événement nommé pour indiquer que, si l'action personnalisée peut attendre pour le processus afin de mettre fin ou d'une annulation de l'événement, selon la première éventualité.
OriginalL'auteur Edward Brey
Vous pouvez insérer VBscript éléments dans le MSI actions personnalisées. Quelque chose comme cela devrait faire l'affaire:
Basé sur ce que sascha a déclaré, je voudrais qu'il était toujours aussi simple que l'utilisation de votre code d'échantillon! Merci pour la réponse, mon ami!
Pas de problèmes, assurez-vous de vérifier le contrat de licence pour pskill lors de l'emballage et de distribution.
OriginalL'auteur Froosh
Si votre app.exe a été créé dans la maison, vous pourriez ajouter une ligne de commande qui lui dit de tuer celle qui est actuellement en cours d'exécution. Quand étant donné que la ligne de commande, il allait l'envoyer en première instance du programme un message ou quelque chose qui lui dit de cesser de fumer et puis traîner juste en attente jusqu'à ce que la première instance du programme a effectivement pris fin. Le programme d'installation serait alors en mesure d'exécuter le programme avec le commutateur de tuer et de savoir que l'instance d'origine a disparu, lorsque le tuer commuté instance a renvoyé.
OriginalL'auteur RobH