powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как убить зависшее приложение?
10 сообщений из 10, страница 1 из 1
Как убить зависшее приложение?
    #37886879
donpauls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется две программы, скажем Прога1.ехе и Прога 2.ехе

Прога2.ехе должна убить процесс Прога1.ехе на основании hWnd её главного окна.
Делаю это так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Sub KillProcess(ByVal hwnd As Long) 'Убить процесс по его hWnd
Dim pID As Long
Dim hProc As Long

    GetWindowThreadProcessId hwnd, pID
    hProc = OpenProcess(PROCESS_TERMINATE, False, pID)
    Call SendMessage(hwnd, WM_QUERYENDSESSION, 0, 1)
    Call SendMessage(hwnd, WM_ENDSESSION, -1, 1)
    TerminateProcess hProc, 0
    CloseHandle hProc

End Sub



Работает нормально.
Но если то-же самое сделать во время того, как Прога1.ехе зависла - то зависает и Прога2.ехе, пока не закроется Прога1.ехе

Хотя с диспетчера задач убивается сразу.

Вопрос: как снабдить Прогу2.ехе такими же привилегиями для убивания процесса, как и у диспетчера задач?
...
Рейтинг: 0 / 0
Как убить зависшее приложение?
    #37886924
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
TerminateProcess hProc, -1&


попробуйте
...
Рейтинг: 0 / 0
Как убить зависшее приложение?
    #37887121
donpauls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One
Код: vbnet
1.
TerminateProcess hProc, -1&


попробуйте

Нет, не помогло. То-же самое.
...
Рейтинг: 0 / 0
Как убить зависшее приложение?
    #37887133
donpauls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я обнаружил, что тормозит на этой строке:

Код: vbnet
1.
Call SendMessage(hwnd, WM_QUERYENDSESSION, 0, 1)



может здесь надо что-то поменять?
...
Рейтинг: 0 / 0
Как убить зависшее приложение?
    #37887150
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можете вообще пока убрать эти 2-е строки кода

Код: vbnet
1.
2.
'    Call SendMessage(hwnd, WM_QUERYENDSESSION, 0, 1)
'    Call SendMessage(hwnd, WM_ENDSESSION, -1, 1)
...
Рейтинг: 0 / 0
Как убить зависшее приложение?
    #37887218
donpauls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneможете вообще пока убрать эти 2-е строки кода

Код: vbnet
1.
2.
'    Call SendMessage(hwnd, WM_QUERYENDSESSION, 0, 1)
'    Call SendMessage(hwnd, WM_ENDSESSION, -1, 1)



Так и сделал. Тормозить перестало. Но и процесс не убивается.
...
Рейтинг: 0 / 0
Как убить зависшее приложение?
    #37887233
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может у вас неправильно hwnd определяется или это не главное окно программы?
...
Рейтинг: 0 / 0
Как убить зависшее приложение?
    #37887242
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
donpaulsХотя с диспетчера задач убивается сразу.
Вопрос: как снабдить Прогу2.ехе такими же привилегиями для убивания процесса, как и у диспетчера задач?
Ну во-первых не всегда все сразу убивается даже из диспетчера, иногда по много раз жать надо.

Далее, а почему б вам через Shell не воспользоваться системной утилитой, туда все API уже давно и правильно заложены:
Microsoft WindowsC:\Documents and Settings\Дима>taskkill /?

TASKKILL [/S <система> [/U <пользователь> [/P [<пароль>]]]]
{ [/FI <фильтр>] [/PID <процесс> | /IM <образ>] } [/F] [/T]

Описание:
Эта команда позволяет завершить один или несколько процессов.
Процесс может быть завершен по имени образа или по идентификатору процесса.

Список параметров:
/S <система> Подключаемый удаленный компьютер.

/U [<домен>\]<пользователь> Пользовательский контекст, в котором
должна выполняться эта команда.

/P <пароль> Пароль для этого пользовательского контекста

Запрашивает пароль, если он не задан.

/F Принудительное завершение процесса


/FI <фильтр> Отображение задач, отвечающих
указанному в фильтре критерию.

/PID <процесс> Идентификатор процесса, который требуется
завершить.

/IM <образ> Имя образа процесса, который требуется
завершить. Для указания всех процессов
можно использовать символ шаблона '*'.

/T Завершение указанного процесса
и всех его дочерних процессов.

/? Вывод справки по использованию.

Фильтры:
Имя фильтра Допустимые операторы Допустимые значения
----------- -------------------- -------------------
STATUS eq, ne RUNNING | NOT RESPONDING
IMAGENAME eq, ne Имя образа
PID eq, ne, gt, lt, ge, le Значение PID
SESSION eq, ne, gt, lt, ge, le Номер сессии
CPUTIME eq, ne, gt, lt, ge, le Время CPU в формате
hh:mm:ss.
hh - часы,
mm - минуты, ss - секунды
MEMUSAGE eq, ne, gt, lt, ge, le Использование памяти в КБ
USERNAME eq, ne Имя пользователя в формате
[<домен>\]<пользователь>
MODULES eq, ne Имя DLL
SERVICES eq, ne Имя службы
WINDOWTITLE eq, ne Заголовок окна

Примечание: Символ '*' для параметра /IM применим только совместно с фильтрами.

Примечание: Завершение удаленных процессов всегда будет принудительным,
независимо от того, был ли использован параметр /F или нет.

Примеры:
TASKKILL /S <система> /F /IM notepad.exe /T
TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
TASKKILL /F /IM notepad.exe /IM mspaint.exe
TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
TASKKILL /S <система> /U <домен>\<пользователь> /FI "USERNAME ne NT*" /IM *
TASKKILL /S <система> /U <пользователь> /P <пароль> /FI "IMAGENAME eq note*"

Далее, а может лучше попытаться понять почему виснет Прога1.ехе
"Умный в гору не пойдёт,умный гору обойдёт".
...
Рейтинг: 0 / 0
Как убить зависшее приложение?
    #37887345
donpauls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77,

Не нашёл примера если надо прибить программу не по имени процессу, а по расположению exe файла. (Файлов запущено несколько с одинаковыми именами но с разных каталогов, а прибить надо один)
...
Рейтинг: 0 / 0
Как убить зависшее приложение?
    #37887355
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стоп, что вы там убивать пытаетесь?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как убить зависшее приложение?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]