2009-06-12 59 views
7

我正在做一個應用程序,用於在用戶註銷時清除臨時文件,歷史記錄等。那麼如何知道系統是否要註銷(使用C#)?從系統獲取註銷事件

回答

9

有一個在環境類講述如果關機過程已經開始了物業:

Environment.HasShutDownStarted 

但一些谷歌上搜索後,我發現,這可能是幫助你:

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 
    } 
    } 

但是,如果您只想清除臨時文件,那麼我認爲區分關機或註銷對您沒有任何影響。

+0

但請記住,在Vista +你很少有時間關閉期間做的東西,所以請確保您不能阻止或等待任何原因(即試圖刪除可能位於網絡共享中的文件等) – 2009-06-12 21:34:08

0

您可以使用WMI並觀察類型等於0的Win32_ComputerShutdownEvent。您可以找到有關此事件的更多信息here以及有關在.NET中使用WMI的更多信息here

6

如果你特別需要註銷的情況下,您可以修改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 
    } 
}