我正在做一个用于在用户注销时清除Temp文件,历史记录等的应用程序。那我怎么知道系统是否要注销(在C#中)?
答案 0 :(得分: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
}
}
但如果您只想清除临时文件,那么我认为区分关闭或注销对您没有任何影响。
答案 1 :(得分: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
}
}
答案 2 :(得分:0)
答案 3 :(得分:0)
如果您具有 Windows窗体,则可以处理FormClosing
事件,然后检查e.CloseReason
枚举值以确定它是否等于CloseReason.WindowsShutDown
。
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.WindowsShutDown)
{
// Your code here
}
}