Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Создание дочернего процесса


Автор: Defiline 27.7.2011, 23:10
Здрасте  smile 

Проблема:
Дело вот какое привело меня сюда:
Есть консольная утилита, исходных кодов которой я не имею. 
Её запускаем из своего приложения с помощью CreateProcess, она выполняет определенные операции в фоновом режиме длительное количество времени пока мы не захотим её закрыть.

Всё работает замечательно до определенного момента, а именно: при завершении сеанса Windows эта утилита убивается напрочь, и все её рабочие данные теряются (если закрывать из приложения - всё сохраняется). Задача в том, чтобы корректно обработать закрытие при завершении сеанса; для этого я ловлю сообщение в своём приложении. Но! Утилита убивается операционной системой ДО того, как передается управление моему приложению.

Вопрос:
Возможно ли (и если да, то как) запустить дочернее приложение таким образом, чтобы Windows в первую очередь посылала сообщение моему приложению, которое корректно на него отреагирует, а не убивала сначала процесс, который я создаю, а потом уже передавала управление мне.

Автор: Defiline 28.7.2011, 09:34
Не люблю апать темы, но ограничение по времени заставляет это делать.
Сейчас рассматриваю как вариант создание сервиса, но не факт, что на компьютере кто-нибудь даст права адимнистратора.

Автор: asmdzen 28.7.2011, 11:19
Цитата(Defiline @  27.7.2011,  23:10 Найти цитируемый пост)
для этого я ловлю сообщение в своём приложении.

какое именно сообщение?
http://msdn.microsoft.com/en-us/library/aa376876.aspx

Автор: Defiline 28.7.2011, 17:14
Цитата(asmdzen @ 28.7.2011,  11:19)
Цитата(Defiline @  27.7.2011,  23:10 Найти цитируемый пост)
для этого я ловлю сообщение в своём приложении.

какое именно сообщение?
http://msdn.microsoft.com/en-us/library/aa376876.aspx

Получаю WM_QUERYENDSESSION.
Но проблема не в том, чтобы его получить, а в том, что запускаемое моим приложение убивается раньше родительского, в результате мне с этим сообщением уже нечего делать. 

Автор: bass 28.7.2011, 18:24
Цитата(Defiline @ 28.7.2011,  17:14)
Цитата(asmdzen @ 28.7.2011,  11:19)
Цитата(Defiline @  27.7.2011,  23:10 Найти цитируемый пост)
для этого я ловлю сообщение в своём приложении.

какое именно сообщение?
http://msdn.microsoft.com/en-us/library/aa376876.aspx

Получаю WM_QUERYENDSESSION.
Но проблема не в том, чтобы его получить, а в том, что запускаемое моим приложение убивается раньше родительского, в результате мне с этим сообщением уже нечего делать.

Я бы похукал бы приложение, в нем бы подменил винпрок..... Ну а там воля ваша что делать с сообщением завершение виндовс.......... Только ваше приложение тоже не должно раньше завершиться а то хук тоже исчезнет..... 

Только для хука тоже права скорей админские потребуються шас не компитентен в этом вопросе....... Хотя если приложение в пользоательском режиме то может и получиться если на него ставить.........

Автор: asmdzen 28.7.2011, 20:56
SetProcessShutdownParameters(0x3FF, 0x00000001);
должно помочь
http://msdn.microsoft.com/en-us/library/ms686227%28v=vs.85%29.aspx

Автор: Defiline 1.8.2011, 15:46
Ага, спасибо, проблему решил.
Тему пометил решенной.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)