|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.07.2012, 13:03 | #1 |
Участник клуба Подтвердите свой е-майл
Регистрация: 26.01.2008
Сообщений: 1,897
|
Ожидание выполнения TerminateProcess
Код:
Код:
Код:
|
12.07.2012, 13:32 | #2 | |||
Форумчанин
Регистрация: 01.06.2009
Сообщений: 108
|
Цитата:
TerminateProcess function: Цитата:
Цитата:
|
|||
12.07.2012, 14:06 | #3 |
Участник клуба Подтвердите свой е-майл
Регистрация: 26.01.2008
Сообщений: 1,897
|
Помягче способа завершения процесса созданного через CreateProcess нет?
|
12.07.2012, 14:58 | #4 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Windows не умеет нормально завершать процессы, особенно оконные. Да и многое от программистов зависит очень многое. Даже Microsoft Document Explorer не умеет закрываться при завершении виндовс(WM_ENDSESSION, WM_QUERTYENDSESSION) а также UpdateCheck от Embracodero, и по этому мне пришлось написать программу которая ищет их и убивает на месте, ибо не выключается система из-за ошибки ололо кодеров.
Получайте окна приложения(EnumWindows по hProcess(не PID)) и посылайте туда WM_EXIT, WM_ENDSESSION, WM_QUERTYENDSESSION,WM_CLOSE(что-то одно, ну или "Пока окно существует(ололо) делем ...") через SendMessageAndWait(см. MSDN), так найболее мягко можно прикрыть не консольное приложение. Ну а консольным светит расстрел, если у них нет child-процесов, а если есть.. то будет кучка не корректных заверешений критических процессов. Я даю юзеру определиться, как он хочет завершить тот или иной процесс, например можно просто прибить его и все порожденные, связаннве с ним или послать туда команду(последовательность), или оконное сообщение(если процесс GUI). GUI или не GUI определяйте чтением PE заголовка, так проще, тем более что там есть флаг отв. за тип бинарника. Последний раз редактировалось Человек_Борща; 12.07.2012 в 15:06. |
12.07.2012, 15:03 | #5 |
Форумчанин
Регистрация: 01.06.2009
Сообщений: 108
|
Можно попробовать PostThreadMessage + WM_QUIT, но не факт что всегда сработает.
Сами Microsoft-овцы рекомендуют делать это вот так: How To Terminate an Application "Cleanly" in Win32 |
12.07.2012, 15:15 | #6 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
окна не будут корректно уничтожены, а ведь может быть с ними связано многое. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
12.07.2012, 15:24 | #7 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Пепел Феникса, согласен Проходили уже это.
Цитата:
Обычно дураков нет и кооректно отрабатывает WM_ENDSESSION, WM_QUERTYENDSESSION. Последний раз редактировалось Человек_Борща; 12.07.2012 в 15:27. |
|
13.07.2012, 17:37 | #8 |
Участник клуба Подтвердите свой е-майл
Регистрация: 26.01.2008
Сообщений: 1,897
|
С EnumWindows не смог сделать, получилось с FindWindow
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
мультипоточное ожидание | Fun_tick | C# (си шарп) | 5 | 05.03.2012 15:00 |
TerminateProcess и windows Server 2008 . Неработает. | Человек_Борща | Общие вопросы Delphi | 7 | 16.02.2011 13:49 |
Ожидание выполнения файла .cmd | Droid | Общие вопросы Delphi | 14 | 01.08.2010 17:05 |
Ожидание нажатия клавиши | shurik_7866 | Общие вопросы Delphi | 2 | 25.04.2010 19:53 |
ожидание внутри процедуры | Juffin | Общие вопросы Delphi | 5 | 01.06.2009 13:52 |