Я хочу иметь возможность перехватывать событие выключения в C# для Windows Vista. Благодаря расширенным функциям безопасности Vista, любые приложения, запущенные после вызова команды выключения, останавливаются и отображаются в списке, предлагая пользователю что-то с ними сделать.
Кто-нибудь знает, как это преодолеть и какие события мне нужно использовать в Vista.
Спасибо.





System.Environment.HasShutdownStarted
+1 для вас, но если HAdes хотел, чтобы приложение отключалось при закрытии Windows, чтобы оно не отображалось в списке, это должно сработать.
Вы можете использовать объект приложения WPF и подписаться на его событие SessionEnding. Затем вы можете посмотреть перечисление SessionEndingCancelEventArgs.ReasonSessionEnding, чтобы точно определить, почему сеанс завершается (выход из системы или завершение работы).
Возможно, вы захотите посмотреть здесь - Изменения завершения работы приложений в Windows Vista. По сути, все, что вы хотите, вращается вокруг WM_QUERYENDSESSION.
Обратите внимание, что это доступно в инфраструктуре .net - вместо этого вам нужно будет использовать собственные функции (p / invoke) и подключить wndproc в своем коде для ответа на сообщение Windows.
В качестве примера (показывающего причину не выключения) вы можете увидеть Windows Vista - ShutdownBlockReasonCreate в C#.
Воспользуйтесь мероприятием
Application.SessionEnding для WPF.
События SessionEnding / SessionEnded в Microsoft.Win32.SystemEvents могут быть тем, что вы ищете.
На самом деле это не событие выключения системы для Vista - это свойство, для которого установлено значение true на любой платформе, когда ваш домен приложения завершает работу.