7

我正在做一个应用程序,用于在用户注销时清除临时文件、历史记录等。那么我怎么知道系统是否要注销(在 C# 中)?

4

4 回答 4

10

Environment类中有一个属性可以说明关闭过程是否已启动:

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

但是,如果您只想清除临时文件,那么我认为区分关闭或注销对您没有任何影响。

于 2009-06-12T04:15:30.667 回答
8

如果您特别需要注销事件,您可以修改 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
    }
}
于 2009-06-12T14:45:49.233 回答
0

您可以使用 WMI 并观看 Type 等于 0 的 Win32_ComputerShutdownEvent。您可以在此处找到有关此事件的更多信息,并在此处找到有关在 .NET 中使用 WMI 的更多信息。

于 2009-06-12T04:02:13.880 回答
0

如果您有Windows 窗体,则可以处理该FormClosing事件,然后检查e.CloseReason枚举值以确定它是否等于CloseReason.WindowsShutDown.

private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.WindowsShutDown)
    {
        // Your code here
    }
}
于 2019-08-11T17:45:08.997 回答