Получить событие выхода из системы - PullRequest
7 голосов
/ 12 июня 2009

Я делаю приложение, которое используется для очистки временных файлов, истории и т. Д., Когда пользователь выходит из системы. Так как я могу узнать, собирается ли система выйти из системы (в C #)?

Ответы [ 3 ]

9 голосов
/ 12 июня 2009

В классе Environment имеется свойство, которое сообщает о том, начался ли процесс завершения работы:

Environment.HasShutDownStarted

Но после некоторого поиска в Google я узнал, что это может вам помочь:

 using Microsoft.Win32;

 //during init of your application bind to this event  
 SystemEvents.SessionEnding += 
            new SessionEndingEventHandler(SystemEvents_SessionEnding);

 void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
 {
     if (Environment.HasShutdownStarted)
     {
         //Tackle Shutdown
     }
     else
     {
         //Tackle log off
     }
  }

Но если вы хотите очистить только временный файл, то я думаю, что различие между выключением или выходом из системы не имеет для вас никакого значения.

8 голосов
/ 12 июня 2009

Если вам необходимо событие выхода из системы, вы можете изменить код, указанный в ответе TheVillageIdiot, следующим образом:

using Microsoft.Win32;

//during init of your application bind to this event   
SystemEvents.SessionEnding += 
    new SessionEndingEventHandler(SystemEvents_SessionEnding);

void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) 
{     
    if (e.Reason == SessionEndReasons.Logoff) 
    {  
        // insert your code here
    }
}
0 голосов
/ 12 июня 2009

Вы можете использовать WMI и смотреть Win32_ComputerShutdownEvent, где Type равен 0. Вы можете найти больше информации об этом событии здесь и больше об использовании WMI в .NET здесь .

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