2009-10-12 2 views
2

Je n'arrive pas à créer un petit script AutoHotkey pour mettre fin à tous les processus vsjitdebugger.exe sur un serveur de test. Voici le code que j'ai:Impossible de fermer certains processus avec AutoHotkey

Process, Exist, vsjitdebugger.exe 
NewPID = %ErrorLevel% 
if NewPID = 0 
{ 
    MsgBox Process doesnt exist 
} 
else 
{ 
    MsgBox Process exists 
} 


Process, WaitClose, vsjitdebugger.exe, 5 
NewPID = %ErrorLevel% 
if NewPID = 0 
{ 
    MsgBox Process no longer exists 
} 
else 
{ 
    MsgBox Process still exists 
} 

Quand exécuter le script me dit que le processus (de vsjitdebugger.exe) existe, comme je l'attendre, mais quand WaitClose arrive, il me dit encore ce processus (es) existent, et quand je regarde dans le Gestionnaire des tâches la même quantité de processus vsjitdebugger.exe sont toujours en cours d'exécution.

Je suis capable de terminer les processus vsjitdebugger.exe manuellement en utilisant le Gestionnaire des tâches.

Fondamentalement, je suis incapable de mettre fin à ces processus. Quelqu'un pourrait-il m'aider avec ça? Merci.

Mise à jour: J'ai aussi essayé cette boucle trop simple, mais sans succès:

Loop, 100 
{ 
    Process, Close, vsjitdebugger.exe 
} 

Mise à jour 2: J'ai essayé le code suivant proposé ci-dessous, mais il reste juste dans la boucle pour toujours et aucun processus sont tués:

Loop 
{ 
    Process, Close, vsjitdebugger.exe 
    Process, wait, vsjitdebugger.exe, 0.1    
    NewPID = %ErrorLevel% 
    if NewPID = 0 
    { 
     break 
    } 
} 
+0

FYI Sous Windows 7, je dois exécuter AutoHotkey en tant qu'administrateur pour qu'il ferme certaines tâches –

Répondre

2

En supposant que vous avez un système avec taskkill.exe sur (je sais ne Windows XP, et je crois que toutes les versions après que font aussi), vous pouvez utiliser cette ligne:

Run, %comspec% /c "taskkill /F /IM vsjitdebugger /T" 
+0

Super qui a fonctionné. Je me demande pourquoi Process, Close ne fonctionne pas mais l'appel de taskkill fait? –

+0

Cela est probablement lié à la destruction forcée du processus ou à la destruction de l'arbre des processus engendrés par ce processus. C'est à ça que servaient les drapeaux/F et/T. –

3

Je n'ai pas Microsoft Visual studio installé sur mon ordinateur, donc je ne pouvais pas tester en utilisant le processus exact. J'ai utilisé notepad.exe à la place. En utilisant la simple boucle que vous avez publiée, j'ai réussi à fermer 10 instances de bloc-notes.

Le code suivant a travaillé sur mon ordinateur (Windows XP SP3) pour fermer toutes les instances de notepad.exe

Process, Exist, notepad.exe 
NewPID = %ErrorLevel% 
if NewPID = 0 
{ 
    MsgBox, Process doesnt exist 
} 
else 
{ 
    MsgBox, Process exists 
} 

Loop 
{ 
    Process, Close, Notepad.exe 
    Process, wait, Notepad.exe, 0.1  
    NewPID = %ErrorLevel% 
    if NewPID = 0 
    { 
     break 
    } 
} 
Process, WaitClose, Notepad.exe 
MsgBox, this works 

Je ne sais pas si cela peut être la cause de l'un des problèmes, mais le La commande WaitClose ne ferme pas le processus, elle attend seulement que le processus n'existe plus.

+0

Merci. Voir ma mise à jour 2 ci-dessus –

1

Je viens de mettre à Windows 7 et j'ai trouvé le même problème de ne pas être en mesure de fermer un processus. Ce qui fonctionnait pour moi était l'exécution du programme en mode de compatibilité XP.

+0

Sous Windows 7, je dois exécuter mon AutoHotkey en tant qu'administrateur pour que Process, Close, iexplore.exe fonctionne –