papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: KillProcess pour 'tuer' toutes les instances d'un processus Sam 17 Oct 2015 - 14:19 | |
| Salut tout le monde. Voici une procédure SUB contenant un script VBS qui tue toutes les instances d’un même processus en cours. Peu importe que le processus soit en cours d’exécution normale, qu’il soit entré en boucle infinie, ou qu’il ait planté. - Code:
-
rem ============================================================================ rem Tuer toutes les instances en cours d un même programme rem ============================================================================ rem Exemple d utilisation rem Dans cet exemple, on ouvre 4 instances du même programme : calc.exe rem Ces instances sont en cours d exécution. rem Nous allons les "tuer" toutes en faisant appel à KillProcess(process$) rem en transmettant la chaîne "calc.exe" comme valeur du paramètre process$ rem Le programme (Panoramic.exe) est en cours d exécution normale. rem Nous allons le "tuer" lui aussi et toutes ses éventuelles instances. rem ============================================================================ rem REMARQUE: rem Peut importe que les processus soient en cours d exécution normale, rem qu ils soient entrés en boucle infinie, ou qu ils aient planté. rem ============================================================================
execute "calc.exe" execute "calc.exe" execute "calc.exe" execute "calc.exe" pause 100 message "Les 4 instances du processus 'Calc.exe' seront tuées, après fermeture de ce message" KillProcess("calc.exe") message "Le processus 'Panoramic.exe' sera tué, après fermeture de ce message" KillProcess("panoramic.exe") end rem ============================================================================ SUB KillProcess(process$) dim_local d$,f$,g$,slash$ d$ = "c:\temp" f$ = d$ + "KillProcess.vbs" g$ = chr$(34) : slash$ = chr$(92) FILE_OPEN_WRITE 9999, f$ file_writeln 9999, "strComputer = "+g$+"."+g$ file_writeln 9999, "strProcessKill = "+g$+"'"+process$+"'"+g$ file_writeln 9999, "Set objWMIService = GetObject("+g$+"winmgmts:"+g$+" _" file_writeln 9999, "& "+g$+"{impersonationLevel=impersonate}!"+slash$+slash$+g$+" & strComputer & "+g$+"\root\cimv2"+g$+")" file_writeln 9999, "Set colProcessList = objWMIService.ExecQuery _" file_writeln 9999, "("+g$+"Select * from Win32_Process Where Name = "+g$+" & strProcessKill )" file_writeln 9999, "For Each objProcess in colProcessList" file_writeln 9999, "objProcess.Terminate()" file_writeln 9999, "Next" file_writeln 9999, "WSCript.Echo "+g$+"Process tué : "+g$+" & strProcessKill" file_writeln 9999, "WScript.Quit"
FILE_CLOSE 9999 EXECUTE_WAIT f$ FILE_DELETE f$
END_SUB rem ============================================================================
Ça peut servir à tuer un processus qui a planté. Personnellement, j’ai crée sur le bureau un fichier KillPano.vbs spécialement pour ‘tuer’ "Panoramic.exe" quand il plante. Voici le code VBS - Code:
-
strComputer = "." strProcessKill = "'panoramic.exe'" Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = " & strProcessKill ) For Each objProcess in colProcessList objProcess.Terminate() Next WSCript.Echo "Just killed process " & strProcessKill WScript.Quit
Dernière édition par papydall le Dim 14 Fév 2016 - 2:53, édité 4 fois (Raison : Le forum bouffe le) | |
|
Invité Invité
| Sujet: Re: KillProcess pour 'tuer' toutes les instances d'un processus Sam 17 Oct 2015 - 16:10 | |
| Merci pour ton programme Papydall. Mais il y a une erreur: il manque "\\" La ligne 36 doit-être écrite ainsi: - Code:
-
file_writeln 9999, "& "+g$+"{impersonationLevel=impersonate}!\\"+g$+" & strComputer & "+g$+"\root\cimv2"+g$+")" Ety là ça marche. Le lien où j'ai trouvé: à lireJe vois que c'est le lien avec la taduction, il faut laisser le curseur sur la ligne pour corriger. |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: KillProcess pour 'tuer' toutes les instances d'un processus Sam 17 Oct 2015 - 17:05 | |
| On peut aussi utiliser dans un programme Panoramic la commande taskkill - Code:
-
tache$ = "Panoramic.exe": ' par exemple EXECUTE_WAIT "cmd.exe /c taskkill.exe /F /T /IM "+tache$ ou dans un simple fichier batch, par exemple Kill.bat, en donnant en paramètre l'exécutable à tuer: ex: Kill.bat Panoramic.exe - Code:
-
@echo off Taskkill.exe /F /T /IM %1 Rappel: la commande tasklist.exe donne la liste de toutes les tâches actives, par exemple: - Code:
-
EXECUTE_WAIT "cmd.exe /c Tasklist.exe >C:\Temp\Listach.txt | |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KillProcess pour 'tuer' toutes les instances d'un processus Sam 17 Oct 2015 - 17:16 | |
| Merci cosmos70 pour le retour. Chez moi, ça marche comme il faut. Les « \\ » ont été bouffés par le forum, ce qui est ENERVANT pour un code entre les balises ! Je viens d’éditer les codes en les remplaçant par chr$(92) et maintenant ils y sont. En tout cas, merci pour l’avoir signalé @JL35 Merci pour le rappeler. Pour Taskkill on en a débattu ici | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: KillProcess pour 'tuer' toutes les instances d'un processus Sam 17 Oct 2015 - 18:05 | |
| | |
|
Invité Invité
| Sujet: Re: KillProcess pour 'tuer' toutes les instances d'un processus Sam 17 Oct 2015 - 18:10 | |
| Je suis en train de penser une chose, malgré que je pense que Jack n'acceptera de revoir ceci: Il y a le bouton stop du menu. Celui-ci arrête un programme en attente d'événement. Mais si on est dans une boucle, ou qu'il y ait un processus qui bloque, il ne fonctionne pas. Ce ne serait pas compliqué de faire la même opération que celles que vous indiquez. On aurait enfin un vrai blocage de programme, sans faire appel au gestionnaire de tâche, ou à ce qu'on aurait nous-même implanté. |
|
Contenu sponsorisé
| Sujet: Re: KillProcess pour 'tuer' toutes les instances d'un processus | |
| |
|