2011-08-11 42 views
1

我試圖檢測註銷事件並將其寫入文本中。使用c檢測註銷的問題#

這怎麼解決?我想在文本文件中寫下注銷時間,但是當我註銷PC時文本文件不會被創建。

static void Main(string[] args) 
{ 
    SystemEvents.SessionSwitch += SystemEvents_SessionSwitch; 
    Console.ReadLine(); 
    SystemEvents.SessionSwitch -= SystemEvents_SessionSwitch; 
} 
static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e) 
{ 
    if (e.Reason == SessionSwitchReason.SessionLogoff) 
    { 
     TextWriter tw = new StreamWriter("D:\\date.txt"); 
     tw.WriteLine("logoff" + DateTime.Now); 
     tw.Close(); 
    } 
    if (e.Reason == SessionSwitchReason.SessionLogon) 
    { 
     TextWriter tw1 = new StreamWriter("D:\\date.txt"); 
     tw1.WriteLine("logoff" + DateTime.Now); 
     tw1.Close(); 
    } 
} 
+0

如果您沒有告訴我們問題是什麼,我們該如何解決這個問題?編輯您的問題以包含這些詳細信息。 –

+0

我猜你剛剛訂閱了該活動。但誰在籌備這個活動? – Zenwalker

+0

我不認爲你可以檢測到控制檯應用程序的註銷,這是你看起來正在寫的東西。到註銷發生時,在該登錄會話中運行的所有代碼都將結束 - 包括此控制檯應用程序。 –

回答

3

這將無法正常工作,除非應用程序有讀取控制檯應用程序沒有的Windows消息的功能。根據SystemEvents.SessionSwitch Event的文檔:

只有在消息泵運行時纔會引發此事件。在Windows 服務中,除非使用隱藏表單或手動啓動消息泵 ,否則不會引發此事件。有關示例如何使用 Windows服務中的隱藏窗體處理系統事件的代碼示例 ,請參閱SystemEvents類。

如果您堅持將其作爲控制檯應用程序運行,請檢查Handling Messages in Console Apps這是用於在控制檯應用程序內運行消息泵的教程。