Перехват события завершения работы Windows Vista в С#

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

Кто-нибудь знает, как преодолеть это и какие события мне нужно использовать в Vista.

Спасибо.


person HAdes    schedule 29.09.2008    source источник


Ответы (5)


Вы можете использовать объект приложения WPF и подписаться на его событие SessionEnding. Затем вы можете просмотреть SessionEndingCancelEventArgs.ReasonSessionEnding перечисление, чтобы точно определить, почему сеанс завершается (выход из системы или завершение работы).

person Ken Wootton    schedule 29.09.2008

Вы можете посмотреть здесь: Изменения в завершении работы приложений в Windows Vista. По сути, для того, что вы хотите, все вращается вокруг WM_QUERYENDSESSION.

Обратите внимание, что это доступно в среде .net - вместо этого вам нужно будет использовать собственные функции (p/invoke) и подключить wndproc в своем коде, чтобы ответить на сообщение Windows.

В качестве примера (с указанием причины отказа от выключения) вы можете увидеть Windows Vista — ShutdownBlockReasonCreate в C#.

person Philip Rieck    schedule 29.09.2008

Используйте событие

Application.SessionEnding для WPF.

person mattlant    schedule 29.09.2008

События SessionEnding/SessionEnded в Microsoft.Win32.SystemEvents могут быть тем, что вы ищете.

person csgero    schedule 29.09.2008

person    schedule
comment
На самом деле это не событие завершения работы системы для Vista — это свойство, установленное в значение true на любой платформе, когда закрывается ваш домен приложения. - person Philip Rieck; 29.09.2008
comment
+1 для вас, но если HAdes хотел, чтобы приложение закрывалось, когда закрывается Windows, чтобы оно не отображалось в списке, это должно работать. - person Eduardo Campañó; 29.09.2008