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?
Dein Programm bekommt auf jeden Fall eine Benachrichtigung. Ich kenne jetzt c# leider nur wenig, aber es gibt bestimmt in den Systemklassen irgendwo eine Methode die beim Beenden angesprungen wird. Die wirst du wohl einfach überschreiben müssen.
Karl Heinz Buchegger schrieb: > http://msdn.microsoft.com/en-us/library/system.ser... der link ist aber für ein Service. (Provides a base class for a service that will exist as part of a service application)
Peter II schrieb: > der link ist aber für ein Service. habe gerade mal gegoogelt: Application.OnExit() könnte die richtige Methode sein. Das sollte für den TO ein Anhaltspunkt sein
je nach Bedarf: .SessionEnding / .PowerModeChanged http://msdn.microsoft.com/de-de/library/microsoft.win32.systemevents.aspx ...ansonsten halt beim schließen des Hauptfensters auf .FormClosed reagieren
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)"
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ß
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.