c# Aktion bei Programm ende bzw. Windows beenden ausführen

Gast #2548930
Lesenswert?
• ▲
▼
Hallo,
ich möchte dass mein C#-Programm beim beenden von windows "nochmal kurz" 
alle Daten abspeichert.
Wie stelle ich das an?

beim herunterfahren beendet Windows ja alle laufenden Programme. Wie 
wird das herunterfahren aber den Programmen mitgeteilt?
Gibt es überhaupt eine Möglichkeit diesen "Herunterfahren-Befehl" in C# 
irgendwie zu erhashen um dann noch schnell eine Sicherung auszuführen?
#2548995
Lesenswert?
• ▲
▼
Ein paar Möglichkeiten wären u.a.
Windows-Forms: Form.FormClosing und dann in 
http://msdn.microsoft.com/de-de/library/system.windows.forms.closereason.aspx 
nachsehen (u.a. WindowsShutDown, TaskManagerClosing, UserClosing)
WPF: 
http://msdn.microsoft.com/en-us/library/system.windows.application.sessionending.aspx
http://msdn.microsoft.com/de-de/library/microsoft.win32.systemevents.sessionending.aspx

Wird mehr Zeit benötigt, um die Aktion zu beenden, war der Hinweis auf 
ServiceBase.OnShutdown richtig.
http://blogs.msdn.com/b/bclteam/archive/2009/02/19/in-depth-how-net-managed-services-interact-with-the-servicecontrolmanager-scm-kim-hamilton.aspx
"If your OnStop fails to call RequestAdditionalTime or blocks for longer 
than 20 (default; see below) seconds, SCM marks service as unresponsive.

To prevent a service from stopping shutdown, the SCM will only wait up 
to a limit for your service to stop itself. The default for this limit 
is 20 seconds (this value is in the registry key 
WaitToKillServiceTimeout() in 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control)"
Gast #2549022
Lesenswert?
• ▲
▼
Danke für die Tipps:

es hat nun folgender Maßen funktioniert:
1
Microsoft.Win32.SystemEvents.SessionEnding += new Microsoft.Win32.SessionEndingEventHandler(this.WinShutdown);
1
private void WinShutdown(object sender, Microsoft.Win32.SessionEndingEventArgs e)
2
{
3
     // mit e.Cancel = true; kann man den shutdown auch unterbinden
4
     v_SaveLog();
5
     Close();
6
}

Danke und Gruß

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.