SystemEvents.SessionEnding не стреляет - PullRequest
0 голосов
/ 06 октября 2011

Я занимаюсь разработкой приложения для форм Windows в c # .net 4.0. Я хочу захватить событие выхода из системы Windows.

Вот код:

    public Form1()
    {
        InitializeComponent();

        SystemEvents.SessionEnding += (s, e) =>
        {
            if (e.Reason == SessionEndReasons.Logoff)
            {
                MessageBox.Show("LogOff");
            }
            else if (e.Reason == SessionEndReasons.SystemShutdown)
            {
                MessageBox.Show("ShutDown");
            }
        };
    }

Почему моя сессия не заканчивается?

Ответы [ 2 ]

2 голосов
/ 07 октября 2011
  1. Это зависит от конфигурации, заданной в gpedit.msc.

Откройте gpedit.msc, перейдите в «Конфигурация компьютера»> «Административные шаблоны»> «Система»> «Параметры выключения» и выберите «Отключить автоматическое завершение работы приложений, которые блокируют или отменяют завершение работы». Поскольку мой ноутбук настроен на автоматическое отключение, он никогда не будет запускать сеанс, заканчивающийся

  1. Возможно, вы можете переместить свой код выше в точку входа своих окон (в основном).

  2. Возможно, вы можете переопределить сообщение Windows. Вы можете увидеть это в документации библиотеки MSDN. http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.sessionending.aspx

  3. Насос сообщения о выключении был перенаправлен другим программным обеспечением и не перенаправлен в ваши приложения

1 голос
/ 22 сентября 2017

Это может быть полезно кому-то.

, если включено событие закрытия формы

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        e.Cancel = true;
    }

, тогда SessionEnding не будет запущен, я просто решил эту проблему и исправил ее

void SystemEvents_SessionEnding(object sender, Microsoft.Win32.SessionEndingEventArgs e)
    {}

здесь мне нужно запретить закрытие формы по команде Alt + F4, поэтому я добавил событие закрытия формы, которое привело к этой проблеме.поэтому мы можем интегрировать событие окончания сеанса в событие закрытия формы. Опция 2 в Ссылка из ответа stackoverflow

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...