AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Was kommt zwischen QueryEndSession und EndSession?
Thema durchsuchen
Ansicht
Themen-Optionen

Was kommt zwischen QueryEndSession und EndSession?

Ein Thema von Angel4585 · begonnen am 10. Sep 2010 · letzter Beitrag vom 24. Sep 2010
Antwort Antwort
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

Was kommt zwischen QueryEndSession und EndSession?

  Alt 10. Sep 2010, 09:48
Guten Morgen.

Ich hab ein kleines Programm, welches eine TCP-Verbindung mit nem lokalen Dienst herstellt um mit diesem Dienst zu kommunizieren.
Nun hängt sich das Programm blöderweise ständig beim herunterfahren auf, was natürllich nicht sein soll, da es dadurch den Shutdown blockiert, der automatisch nachts nach einer Sicherung stattfinden soll.

Im Programm selbst verwende ich QueryEndSession und QuerySession, da das Programm auf Befehl den Shutdown blockieren soll.
Dieser Befehl kommt momentan nie, also kann man das eigentlich ignorieren.
Allerdings habe ich festgestellt, dass QueryEndSession erfolgreich abgearbeitet, EndSession in manchen Fällen jedoch nie erreicht wird.

Stellt sich mir die Frage: Was kommt zwischen QueryEndSession und EndSession?
Wo muss ich nach dem Fehler suchen?

Ich verwende Indy TCP Komponenten, Threads, Timer.

In der QueryEndSession-Methode mache ich nichts ausser abzufragen, ob blockiert werden soll oder nicht, sollte man da auch TCP-Verbindungen etc beenden?
Hab das bisher immer im finalization Abschnitt gemacht.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Was kommt zwischen QueryEndSession und EndSession?

  Alt 14. Sep 2010, 10:32
Oha, keiner eine Idee?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#3

AW: Was kommt zwischen QueryEndSession und EndSession?

  Alt 24. Sep 2010, 09:49
QueryEndSession ist ja nur die Frage an die Anwendung, ob Einspruch gegen das Beenden erhoben wird.
Die Frage muss einfach beantwortet werden. Ob wirklich die Session beendet wird, hängt ja auch von den anderen Anwendungen ab. Deshalb sollte das Programm als Reaktion auf diese Nachricht keine weiteren Aktionen unternehmen.
Bei Endsession kann eigentlich das Beenden nicht mehr wirklich verhindert werden. Hier kann die Anwendung einfach nicht gespeicherte Daten bzw. den aktuellen Status z.B. in einer speziellen Sicherungsdatei speichern, so dass beim nächsten Programmstart die Arbeit an dieser Stelle fortgesetzt wird. Den Benutzer noch zu Fragen, ob er die Änderungen wirklich speichern will, ist eher ungünstig.
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#4

AW: Was kommt zwischen QueryEndSession und EndSession?

  Alt 24. Sep 2010, 11:08
Zwischen QueryEndSession und EndSession vergehen ein paar Sekunden Bedenkzeit, bei dem auf die Rückgabewerte der QueryEndSession messages gewartet wird. Wie man das Herunterfahren abbricht, ist hier zu sehen (das sollte die Schwierigkeit nicht gewesen sein)
http://www.delphipraxis.net/972598-post8.html
vom feeling her würde ich einen Dialog mit countdown ala "Herunterfahren abbrechen (3..2..1..)" anzeigen lassen, falls noch wichtige Vorgänge laufen und ein user davorsitzt. Wenn die Zeit verstrichen ist, keine Interaktion erfolgt ist und noch etwas wichtiges am Laufen war, kann man einen Protokolleintrag erzeugen, unter welchen Umständen das Herunterfahren ausgeführt wurde.
Power is nothing without TControl

Geändert von hboy (24. Sep 2010 um 11:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Was kommt zwischen QueryEndSession und EndSession?

  Alt 24. Sep 2010, 12:10
Ab Vista ist es allerdings so, dass das Betriebssystem keine Rücksicht mehr nimmt auf den Rückgabewert von QueryEndSession. Das Betriebssystem fährt auch runter, wenn man sagt, es soll nicht runterfahren. Die Entwickler haben sich gesagt, "der Benutzer will das System runterfahren, also fahren wir es auch runter".
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#6

AW: Was kommt zwischen QueryEndSession und EndSession?

  Alt 24. Sep 2010, 14:02
Danke für den Hinweis, das ist natürlich unschön. Kann man wenigstens mit "shutdown -a" noch etwas reißen oder sind die Shellbefehle ab QueryEndSession auch nicht mehr verfügbar?
Power is nothing without TControl
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Was kommt zwischen QueryEndSession und EndSession?

  Alt 24. Sep 2010, 14:40
Ich finde es nicht unschön. Ich fand es immer nervig, wenn ein Programm das Runterfahren abgebrochen hat, obwohl ich den Rechner runterfahren wollte.

Mit shutdown -a kann man das sicherlich abbrechen, allerdings sind zum Ausführen Administratorrechte erforderlich und die sollten eigentlich bei einem gewöhnlichem Nutzer nicht vorhanden sein.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Was kommt zwischen QueryEndSession und EndSession?

  Alt 24. Sep 2010, 15:33
Und was ist, wenn ein Programm noch ein bissl braucht, um alles zu speichern und zu beenden?

Aber ich weiß was du meinst ... z.B. der blöde DExplorer (Delphis neue OH) beendet sich nicht richtig und verhindert dann das Runterfahren. (warum auch immer man da sowas drin verbaut hat)
$2B or not $2B
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Was kommt zwischen QueryEndSession und EndSession?

  Alt 24. Sep 2010, 15:51
Ich finde es nicht unschön. Ich fand es immer nervig, wenn ein Programm das Runterfahren abgebrochen hat, obwohl ich den Rechner runterfahren wollte.
Achja, das war bei Windows 98 immer ganz toll... jeden zweiten Tag hat sich irgendein Programm aufgehängt und den Shutdown verhindert, ohne dass es eine Möglichkeit gegeben hätte, das zu umgehen (gut, gab es sicher, aber kannte ich damals nicht).
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: Was kommt zwischen QueryEndSession und EndSession?

  Alt 24. Sep 2010, 16:22
@himitsu: Man kann das Runterfahren nur verzögern, wenn man QueryEndSession negativ beantwortet. Zeit zum Speichern bleibt also noch.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz