Holen Sie sich eine Log -Off -Veranstaltung vom System aus
Frage
Ich mache eine Anwendung, mit der die TEMP -Dateien, der Verlauf usw. gelöscht werden, wenn sich der Benutzer abmeldet. Woher kann ich wissen, ob das System (in C#) einmeldet wird?
Lösung
Es gibt eine Immobilie in Umfeld Klasse, der darüber informiert wird, ob der Abschaltprozess begonnen hat:
Environment.HasShutDownStarted
Aber nach einigem Googeln fand ich heraus, dass dies Ihnen hilfreich sein könnte:
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
}
}
Wenn Sie jedoch nur die Temp -Datei löschen möchten, dann denke ich, dass es für Sie keine Konsequenz ist, zwischen dem Herunterfahren oder dem Abmeldung zu unterscheiden.
Andere Tipps
Wenn Sie das Log-off-Ereignis speziell benötigen, können Sie den Code in der Antwort von TheVillageIdiot wie folgt ändern:
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
}
}
Wenn Sie eine haben Windows -Formular, Sie können mit dem umgehen FormClosing
Ereignis, dann überprüfen Sie die e.CloseReason
Umlaufwert, um festzustellen, ob er gleich ist CloseReason.WindowsShutDown
.
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.WindowsShutDown)
{
// Your code here
}
}