Не удается закрыть определенные процессы с AutoHotkey - PullRequest
2 голосов
/ 12 октября 2009

У меня проблемы с созданием небольшого сценария AutoHotkey для завершения всех процессов vsjitdebugger.exe на тестовом сервере. Вот код, который у меня есть:

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
}

При запуске сценарий сообщает мне, что процесс (vsjitdebugger.exe) существует, как я и ожидал, но когда происходит WaitClose, он все равно сообщает мне, что процессы существуют, и когда я смотрю в диспетчере задач такое же количество процессов vsjitdebugger.exe все еще работают.

Я могу завершить процессы vsjitdebugger.exe вручную с помощью диспетчера задач.

По сути, я не могу завершить эти процессы. Может ли кто-нибудь помочь мне с этим? Спасибо.

Обновление : я тоже пробовал этот простой цикл, но безрезультатно:

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

Обновление 2 : я попробовал следующий код, предложенный ниже, но он просто остается в цикле навсегда и никакие процессы не останавливаются:

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

Ответы [ 3 ]

3 голосов
/ 12 октября 2009

У меня не установлено приложение Microsoft Visual Studio на моем компьютере, поэтому я не смог протестировать, используя точный процесс. Я использовал notepad.exe вместо этого. Используя опубликованный вами простой цикл, я смог успешно закрыть 10 экземпляров блокнота.

Следующий код работал на моем компьютере (WinXP SP3), чтобы закрыть все экземпляры 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

Я не уверен, может ли это быть причиной какой-либо из проблем, но команда WaitClose не закрывает процесс, а только ожидает, что процесс больше не существует.

2 голосов
/ 16 октября 2009

Предполагая, что у вас есть система с taskkill.exe (я знаю, что Windows XP делает, и я верю, что все версии после этого тоже), вы можете использовать эту строку:

Run, %comspec% /c "taskkill /F /IM vsjitdebugger /T"
1 голос
/ 02 марта 2010

Я только что обновился до Windows 7 и обнаружил, что у меня та же проблема с невозможностью закрыть процесс. Для меня работало то, что программа работала в режиме совместимости с XP.

...