Что нового

[Процессы] "Корректное" завершение процесса

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Подскажите, пожалуйста, можно ли завершить процесс корректно, а не аварийно, как это делает функция ProcessClose()?
То есть, я хочу, чтобы процесс "знал", что он должен завершиться, и завершил все свои задачи...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
если сам процесс не поддерживает, то нет
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Вопрос и меня интересовал как то. Решени я так и не нашёл. Где то писали что нужно посылать процессу некие сообщения о закрытий, также как это делает система при завершений своей работы (ведь приложения при этом закрываются корректно, ну, по крайней мере большинство из них :smile: ), но рабочего примера я ещё не видел :(.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Re: [Процессы] \"Корректное\" завершение процесса

CreatoR [?]
Где то писали что нужно посылать процессу некие сообщения о закрытий
да. надо посылать WM_CLOSE - эквивалент команды закрыть системного меню


Добавлено:
Сообщение автоматически объединено:

Код:
#include <SendMessage.au3>
Opt('WinTitleMatchMode', 2)
$hWnd = WinGetHandle('Notepad')
_SendMessage($hWnd, 0x0010)

а вообще, на эту тему советую почитать Опасная функция ExitProcess
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Kaster [?]
надо посылать WM_CLOSE - эквивалент команды закрыть системного меню
Так это если есть окна у процесса, это также эквивалентно WinClose ;)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
а как насчет попробовать taskkill /IM process.exe?
помоему он нормально завершает, в отличие от /F
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Kaster
TASKKILL действительно все делает "корректно"...
Он бы подошел как альтернатива "встроенным" возможностям...
>taskkill /im dutraffic.exe
Успех: Отправлен сигнал завершения процессу "dutraffic.exe" с идентификатором 2944.
Однако нужный мне процесс не поддерживает "корректное" завершение... :(
Не смотря на частный отрицательный результат:
- тема решена...
- спасибо Kaster и CreatoR за помощь... :IL_AutoIt_1:
- +1 к репутации Kaster...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Kaster
Это уже прогресс, однако я попробовал на процессе браузера Opera, вот что пишет:
Успешно: Процесс, с идентификатором 3016, успешно завершен.
Однако он не завершен, т.к в опере установлена опция подтверждения выхода, и диалог подтверждения появляется вместо закрытия. Получается что сигнал о закрытий послан, но утилита taskkill не проверяет, был ли процесс на самом деле закрыт, мне кажется это бага.
В любом случае, нужно искать решение, аналог процедуре вызываемой при завершений системы.

P.S
Тема на оф. форуме: How to close window without killing it?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
CreatoR
помоему тоже происходит с любыми приложениями которые при приеме сигнала завершения запрашивают диалог с пользователем. даже при обычном завершении сеанса. например у меня, ФФ при кол-во открытых вкладок больше 1 спрашивает действительно ли я хочу закрыть браузер. np++ при наличии несохраненных файлов спрашивает не надо ли их сохранить. и т.д. все эти приложения, через 5 сек после посыла сигнала переходит в состояния "зависшие". и тут мне кажется, что после определенного времени все же посылается сигнал о принудительном завершении процесса. поэтому тут говорить о "корректном" завершении сложно. т.к. корректным оно будет только с участием пользователя.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Kaster [?]
все эти приложения, через 5 сек после посыла сигнала переходит в состояния "зависшие".
Во-первых то время в течений которого приложение считается зависшим (при отсутствий реакций на действия), настраивается в системе, у меня это 15 секунд. А во-вторых я не просто так пальцем в небо тыкаю, а наверняка знаю что система всё же корректо завершает работу моего браузера при её перезапуске, да появляется также диалог подтверждения, но система видимо и ему что то посылает что заставляет его закрыться, и причём как будто я сам нажал «Да, выйти из Opera».
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
CreatoR
Так глубоко я не копал. Но лично у меня были случаи, когда из-за того, что выбор в диалоге не был сделан система так и не выключалась (бывал очень удивлен, когда утром обнаруживал комп включенным с диалогами - "Не хотите ли сохранить документ" и "приложение не отвечает, завершить, отмена"), равно как и случаи, когда комп нормально выключался, но документы так и не были сохранены (аналог нажатия на кнопку Нет). И даже были случаи, когда сбивались настройки браузера из-за аварийного завершения. У меня браузер запускается через маленькую утилиту, которая иногда глючит. Поэтому, говорить однозначно не возьмусь
 
Верх