AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Prozedur weiterleiten

Ein Thema von TheMiller · begonnen am 22. Dez 2010 · letzter Beitrag vom 23. Dez 2010
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Prozedur weiterleiten

  Alt 22. Dez 2010, 18:10
Hallo,

ich weiß, dass dieser Topic-Titel sau dämlich ist, aber ich habe keine Ahnung, wie ich das gewünschte Verhalten anders bezeichnen könnte.

Problem ist folgendes: Ich habe eine Update-Klasse, die mehrere Programme von mir updatet. Sie wird einfach eingebunden und ein Thread sucht dann bei Start nach Updates für das entsprechende Programm. Wird eins gefunden, wird gefragt, ob der User das Update durchführen möchte. Sagt er "ja" (bzw. klickt auf "ja"), das Programm beendet sich und der Updater wird aufgerufen.

Im letzten Schritt liegt das Problem. Ich sende nach der Antwort mit "Ja" aus der Update-Klasse eine WM_QUIT-Message an das Programm, damit es geschlossen wird. Wenn jetzt das Programm allerdings einen "Wirklich-beenden"-Dialog eingebaut hat, wird das Programm nicht beendet, sondern diese Frage erscheint, der Updater öffnet sich dennoch, zieht das Update und versucht die Datei zu ersetzen.

Meine Lösung wäre nun folgende:
Ich habe in der Update-Klasse eine Property, welche mit einer Prozedur einer anderen Klasse (hier TForm) verknüpft wird. Wenn eine solche Prozedur verknüpft ist, wird diese aufgerufen und danach die WM_Quit gesendet. Die Prozedur würde eine Boolean-Variable setzen, welche den "Wirklich-beenden"-Dialog aushebelt.

Wie könnte ich das umsetzen? Oder habt ihr andere/bessere Ideen?

Danke im Voraus!
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#2

AW: Prozedur weiterleiten

  Alt 22. Dez 2010, 18:25
Nabend ...,
vielleicht sollte dein Updater überprüfen ob der zu beendende Prozess noch aktiv ist und erst dann das Update einspielen, oder wie schon öfter beschrieben ... die laufende Instanz umbenennen und zeitgleich das Update einspielen. Bei Dll's bin ich mir aber net sicher ob das so funktioniert!
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#3

AW: Prozedur weiterleiten

  Alt 22. Dez 2010, 18:27
Altermativ kannst du ja auch WM_ENDSESSION senden. Darauf sollte sich jede Anwendung ohne weitere Rückfragen selbst beenden.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#4

AW: Prozedur weiterleiten

  Alt 22. Dez 2010, 18:36
Altermativ kannst du ja auch WM_ENDSESSION senden. Darauf sollte sich jede Anwendung ohne weitere Rückfragen selbst beenden.
Was ist wenn noch Daten gespeichert oder zum Abschluss Benutzerhandlungen durchgeführt werden müssen?
Alternativ habe ich bei einigen Programmen beobachtet das Updates erst nach Programmende eingespielt werden.
Programmstart: auf Updates prüfen -> Updates runterladen -> normaler Programmablauf -> Programmende: Updates einspielen
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#5

AW: Prozedur weiterleiten

  Alt 22. Dez 2010, 19:16
Altermativ kannst du ja auch WM_ENDSESSION senden. Darauf sollte sich jede Anwendung ohne weitere Rückfragen selbst beenden.
Was ist wenn noch Daten gespeichert oder zum Abschluss Benutzerhandlungen durchgeführt werden müssen?
Bei WM_ENDSESSION hast du keine Chance nachzufragen - das System fährt dann eigentlich nämlich runter (z.B. bei einem Stromausfall). Wenn die App sich nicht innerhalb eines Timeouts beendet wird sie gekillt. Leider reagieren längst nicht alle Programme korrekt auf diese Message. Aber seine eigenen Programme kann man ja ruhig darauf ausrichten.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Prozedur weiterleiten

  Alt 22. Dez 2010, 20:08
Ich halte das nicht für sehr günstig. Angenommen ich arbeite noch mit anderen Programmen, während das Update läuft. Dann wäre es mir nicht recht, wenn der Updater das System einfach runter fahren würde.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#7

AW: Prozedur weiterleiten

  Alt 22. Dez 2010, 20:20
Ich halte das nicht für sehr günstig. Angenommen ich arbeite noch mit anderen Programmen, während das Update läuft. Dann wäre es mir nicht recht, wenn der Updater das System einfach runter fahren würde.
Ich habe ja nicht gesagt, daß er das System runterfahren soll. Er soll der App nur vorgaukeln, daß es runterfährt, damit sie sich ohne Nachfrage beendet. Das WM_ENDSESSION kommt ja nicht vom Betriebssystem.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Prozedur weiterleiten

  Alt 22. Dez 2010, 20:57
Kann man die Nachricht denn gezielt an ein Fenster senden?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#9

AW: Prozedur weiterleiten

  Alt 22. Dez 2010, 21:05
Kann man die Nachricht denn gezielt an ein Fenster senden?
Na ja, wo wird er denn die WM_QUIT message hinschicken?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Prozedur weiterleiten

  Alt 22. Dez 2010, 21:23
Klar, die Nachricht kann man gezielt verschicken, aber kann man bei WM_ENDSESSION auch ein Fensterhandle angeben oder wird diese generell an alle Fenster verschickt? das war meine Frage.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 01:31 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