Laden...

[gelöst] Windows Shutdown rechtzeitig blockieren, sodass *keine* Anwendung beendet wird....wie?

Erstellt von Grantig vor 13 Jahren Letzter Beitrag vor 13 Jahren 4.653 Views
Grantig Themenstarter:in
19 Beiträge seit 2009
vor 13 Jahren
[gelöst] Windows Shutdown rechtzeitig blockieren, sodass *keine* Anwendung beendet wird....wie?

Hallo,

wie der Titel schon sagt, suche ich nach einer Möglichkeit den Shutdown zu blockieren.

Im Moment fange ich die WM_QUERYENDSESSION + WM_ENDSESSION Messages in der WndProc Methode ab.


protected override void WndProc(ref Message message)
{
      if (message.Msg == WM_QUERYENDSESSION || message.Msg == WM_ENDSESSION)
      {
             return;
      }
            
      base.WndProc(ref message);
}

Das funktioniert auch, doch es werden trotzdem alle Anwendungen geschlossen, die die WM_QUERYENDSESSION Message vor meiner Anwendung erhalten.

Gibt es ein Shutdown Event o.Ä. , das gefeuert wird, bevor WM_QUERYENDSESSION an alle Fenster gesendet wird? (mit SystemEvents.SessionEnding klappts nicht)
Oder gibt es sonst irgendeine Möglichkeit den Shutdown zu blockieren, bevor irgendein Programm geschlossen wird?

156 Beiträge seit 2010
vor 13 Jahren

Du willst das Verhalten von Windows beeinflussen?

1.820 Beiträge seit 2005
vor 13 Jahren

Hallo!

Unabhängig davon, dass ich keine direkte Lösung parat habe, wüsste ich gerne, aus welchem Grund man einen ShutDown verhindern sollte, vor allem das Beenden der Anwendungen.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Grantig Themenstarter:in
19 Beiträge seit 2009
vor 13 Jahren

Um ein "versehentliches" Herunterfahren zu verhindern.
Beispielsweise wenn irgendein Task/Programm/Script im Hintergrund läuft, soll der Shutdown blockiert und der Benutzer darauf hingewiesen werden, dass evtl. Daten oder der Fortschritt (z.B. bei einem Download) verloren gehen können.

Ich weiß, dass jedes Programm selbst warnen sollte, wenn beim Shutdown Daten verloren gehen könnten, aber oft ist das eben nicht der Fall.

Das ganze soll auch nur als Option angeboten werden und der Shutdown soll auch nur blockiert werden, wenn vom Benutzer selbst definierte Regeln erfüllt sind.

P
660 Beiträge seit 2008
vor 13 Jahren

Hallo,

Vllt hilft dir dieser Link etwas weiter

AbortSystemShutdown

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

Grantig Themenstarter:in
19 Beiträge seit 2009
vor 13 Jahren

Danke für den Link. 🙂
Leider kenne ich diese Methode bereits und sie hilft mir nicht weiter.

Mein Problem ist nicht, dass ich nicht weiß wie ich den Shutdown blockieren/unterbrechen kann, sondern dass ich nicht weiß wie ich den Shutdown rechtzeitig blockieren kann, bevor irgendwelche Programme geschlossen werden.

P
660 Beiträge seit 2008
vor 13 Jahren

Also meinst du sowas wie Word es Integriert hat?
(Dort wird auch das Herunterfahren verhindert wenn noch ungespeicherte Daten vorhanden sind. Sobald der User dann eine Option gewählt hat wird heruntergefahren)

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

1.378 Beiträge seit 2006
vor 13 Jahren

Laut diversen Artikeln die ich jetzt überflogen bin musst du nur das QueryEndSession Event abhorchen und bei einem Abbruch "false" zurück geben was du in deinem Codeausschnitt nicht machst.

Bei QueryEndSession wird, zumindest laut Doku, noch nichts geschlossen. Erst bei EndSession.

Ich nehm alles zurück. 😃

When an application returns TRUE for this message, it receives the WM_ENDSESSION message, regardless of how the other applications respond to the WM_QUERYENDSESSION message

Man müsste sich irgendwie an erste Stelle der Windows Nachrichtenschleife reinhängen. Hätt aber keine Ahnung wie.

Siehe Doku: WM_QUERYENDSESSION Message.

Lg XXX

1.378 Beiträge seit 2006
vor 13 Jahren

Der Link in der Doku sieht aber dazu vielversprechend aus: SetProcessShutdownParameters Function.

Lg XXX

Grantig Themenstarter:in
19 Beiträge seit 2009
vor 13 Jahren

@ProGamer
Jap, genau und das klappt auch schon so.
Nur eben "zu spät".

@xxxprod
Danke! 👍
Ich glaub SetProcessShutdownParameters ist genau das was ich suche.
Ich werds gleich mal ausprobieren und dann Rückmeldung geben, obs geklappt hat, oder nicht.

Grantig Themenstarter:in
19 Beiträge seit 2009
vor 13 Jahren

Es funktioniert! 😁
Danke nochmal xxxprod.