У меня проблема, которая возникает во время выключения. У меня есть кусок кода, написанный на C ++, который обернут в .dll и внедрен в другие приложения. Он делает кучу вещей, включая запуск другого приложения (сервера), написанного на C #.
Однако после запуска выключения код c ++ запускает приложение C #, потому что оно было остановлено выключением, которое быстро завершается сбоем, потому что система собирается завершить работу.
Затем окно ошибки останавливает выключение, пока пользователь не справится с этим, что раздражает. Есть ли способ спросить у ОС: «Эй, ты выключаешься / перезагружаешься / выходишь из системы?» так я не запускаю приложение, пока это происходит? Я полагаю, что решение на любом конце будет в порядке.
== РЕДАКТИРОВАТЬ ==
Для немного большего уточнения. Код, который работает как внедренный .dll, не может предполагать, что приложение, в которое он внедрен, имеет какое-либо «окно». Кроме того, я хотел бы что-то, что я мог бы запросить, а не событие, которое я должен слушать, потому что я могу пропустить это событие из-за времени. Мне интересно, есть ли какая-нибудь функция, которая бы эффективно дала мне что-то вроде этого
bool IsSystemShutting();
И в этом отношении опция C # будет работать для меня так же, как опция C ++. Но в .NET Framework SystemEvents.SessionEnding а также SystemEvents.SessionEnded оба события против свойств. Очень часто случается так, что я подписываюсь на это событие ПОСЛЕ того, как событие произошло, поэтому я не имею на это никакого права.
WM_ENDSESSION а также WM_QUERYENDSESSION сообщения предназначены для этого сценария. Windows отправит эти оконные сообщения окну, когда инициируется процесс выключения, перезапуска или выхода из системы.
Других решений пока нет …