Подскажите пожалуйста, как определить, происходит ли в данный момент logoff системы? Проблема заключается в следующем. У меня есть процесс, который я запускаю из сервиса и жду завершения этого процесса средствами WaitForSingleObject. Процесс может быть завершен двумя способами. Либо он умирает сам естественным образом (выход из WinMain), либо его прибивает винда во время logoff-а. В зависимости от того, по какой причине умер процесс, мне нужно выполнить определенные шаманства. Как определить, от чего умер процесс? Как вариант - достаточно научиться определять, происходит ли в данный момент логоф системы. Скажу сразу - отлов WTS_SESSION_LOGOFF и WTS_CONSOLE_DISCONNECT не канает - WaitForSingleObject отпускает прежде чем приходят эти нотификации :-(
Может в процессе создать окошко и в его оконной процедуре по WM_ENDSESSION возвращать из винмейна специальный код возврата?
всё хорошо. только до выхода из винмейна дело в нашем случае не доходит. процесс киляют где-то в процессе выхода
Может в процессе создать занятый именованный mutex, в сервисе ждать на нём и в случае успешного завершения процесса отпускать mutext корректно через ReleaseMutex, а если процесс прибьют насильно то WaitForSingleObject вывалится с WAIT_ABANDONED.
roman_pro В этом случае останется непонятной причина смерти процесса. Его убила винда при логофе, или юзер из TaskManager?
вопрос поставлен некорректно надо так: как отличить прибивание процесса из таск-манагера от прибивания из винлогона ответ: без анализа стека - никак ИМХО
Вообще, винда же знает, что идёт завершение сессии - не даёт в это время запускать процессы. Значит, можно теоретически получить эту информацию.