Что нового

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

snoitaleR

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

kaster

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

CreatoR

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

kaster

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

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


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

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

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

CreatoR

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

kaster

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

snoitaleR

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

CreatoR

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

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

kaster

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

CreatoR

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

kaster

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