Re[4]: Как быстро и правильно закрыть процесс запущенный через ShellExecute?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 10.03.13 13:42
Оценка:
Здравствуйте, okman, Вы писали:

O>Здравствуйте, egvos4, Вы писали:


E>>Как пишет Джефри Рихтер, не желательно принудительно уничтожать процесс из другого процесса путем вызова TerminateProcess. Желательно, чтобы сам первоначальный процесс вызвал у себя ExitProcess и корректно завершился. Соответственно вопрос в том как правильно передать команду процессу, в моем случае одному из четырех запущенных браузеров для их корректного закрытия. Например как-то передать WM_CLOSE? Есть идеи?


O>WM_CLOSE эквивалентен нажатию на кнопку "закрыть" в правом углу окна.

O>Что еще вовсе не означает завершение всей программы. Например, браузер запустился и
O>показывает пользователю диалог: "данная программа не является браузером по умолчанию",
O>предлагая сделать ее таковой. WM_CLOSE закроет это окно, а основное окно останется висеть.

O>TerminateProcess нежелателен тем, что после него данные, которыми оперировала программа,

O>могут остаться в несогласованном состоянии. Точно также, как и в случае аварийного завершения.
O>Но с другой стороны, TerminateProcess дает наиболее сильную гарантию завершения процесса и
O>если альтернатив не видно, я бы использовал эту функцию, не особо стесняясь.


Хотя как писал ниже okman, это не гарантия закрытия процесса. Процесс может иначе обработать эти сообщения и не завершаться. Хотя в 99 из 100 как правило скорее всего завершиться. Но это не из логики вытекает, а из традиций. Что вряд ли процесс останется работать после таких "просьб". Но опять же — это традиции и только, ничто не мешает абстрактному процессу игнорировать эти сообщения в том или ином случае.

PS: Примеров прямо противоположных именно традиций сотни. "Традиций" в том смысле что в абстрактном софте Икс сделано незавершение по нажатию на крестик (WM_CLOSE | WM_SYSCOMMAND+SC_CLOSE) не из абстрактной "вредности", а по смыслу. Ну, например, настройки типа "сворачивать в трей" при нажатии на крест, много где такие настройки используются. Соответственно, процесс как работал так и будет работать.
Aml Pages Home
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.