Montag, 8. November 2010

Herunterfahren von Windows verhindern / verzögern

Im vorigen Post wurde gezeigt, wie man erkennen kann, ob der PC heruntergefahren wird.
In diesem Post geht es darum, wie man das Herunterfahren abbricht bzw. verzögert um z.B. vorher Daten zu sichern.
Im vorigen Post wurde die Methode FormClosing() benutzt, in welcher beim Schließen des Formulars der Beendigungsgrund abgefragt wurde.
In dieser Methode können wir nun ebenfalls über den Parameter e das Herunterfahren einfach unterbinden, in dem wir e.Cancel = true setzen.
Das Herunterfahren des Rechners wird damit nicht vollständig abgebrochen, sondern nur solange verzögert, wie das Programm läuft - nun hat die Anwendung beispielsweise Zeit, ungesicherte Daten zu speichern.
In Windows Vista und 7 erscheint dabei ein Wartungsfenster mit dem Hinweis: "Folgendes Programm verhindert das Herunterfahren des Computers."

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.WindowsShutDown)
        e.Cancel = true;
}


Eine andere Möglichkeit, das Herunterfahren von Windows zu verzögern, besteht in der Verwendung des Microsoft.Win32.SystemEvents.SessionEnding Ereignisses, welches bei Herunterfahren des Systems eintritt.
Diesem Ereignis kann man wie anderen Ereignissen (z.B. Klick auf einen Button) eine Methode zuweisen, die aufgerufen wird, wenn es eintritt.
Folgender Codeausschnitt zeigt ein Beispiel unter Verwendung des Systemereignisses:

        private void Form1_Load(object sender, EventArgs e)
        {
            Microsoft.Win32.SystemEvents.SessionEnding += new Microsoft.Win32.SessionEndingEventHandler(this.WinShutdown);
        }

        private void WinShutdown(object sender, Microsoft.Win32.SessionEndingEventArgs e)
        {
            e.Cancel = true;
        }

Kommentare:

  1. Was ist denn genau der Vorteil von der EndSession-Methode gegenüber dem FormClosing-Event?

    AntwortenLöschen
  2. Hi Stefan,
    was meinst du denn mit "Vorteil"? Die EndSession - Methode ist einfach nur ein anderes Ereignis welches beim Herunterfahren des Systems eintritt.
    Coole Seite übrigens ;)

    AntwortenLöschen
  3. Danke. Genau sowas hab ich gesucht. Aber unter 7 steht dann da dieser Win-Screen: Es wird darauf gewartet.. Blablabla... Mein Programm: Dieses Programm verhindert...

    ^^Wie kann ich das verhindern ?? ^^

    LG Darius.

    AntwortenLöschen
    Antworten
    1. Hey, dafür kenne ich leider keine Möglichkeit.

      Lg
      Oliver

      Löschen