Не удается закрыть определенные процессы с помощью AutoHotkey

У меня возникли проблемы с созданием небольшого скрипта 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
    }   
}

person Matthew Lock    schedule 12.10.2009    source источник
comment
К вашему сведению, в Windows 7 мне нужно запустить AutoHotkey от имени администратора, чтобы закрыть некоторые задачи.   -  person Matthew Lock    schedule 27.01.2011


Ответы (3)


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

Run, %comspec% /c "taskkill /F /IM vsjitdebugger /T"
person Agent_9191    schedule 15.10.2009
comment
Отлично, что сработало. Интересно, почему Process, Close не работает, а вызов taskkill работает? - person Matthew Lock; 16.10.2009
comment
Вероятно, это связано с принудительным уничтожением процесса или уничтожением порожденного им дерева процессов. Вот для чего нужны флаги /F и /T. - person Agent_9191; 16.10.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 не закрывает процесс, а только ждет, пока процесс перестанет существовать.

person the3seashells    schedule 12.10.2009

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

person Korrigan    schedule 01.03.2010
comment
В Windows 7 мне нужно запустить AutoHotkey от имени администратора, чтобы заставить работать Process, Close, iexplore.exe. - person Matthew Lock; 27.01.2011