Vielen Dank für die vielen Info´s ..
Sendmessage geht nicht, Timer mit Textfile will ich eher nicht, Datei einfach umbenennen geht auch nicht,
Mutex .. hmm .. tja .. mal schauen ..
Momentane Überlegung:
- Timer und Datenbank als "Kommunikationsschnittstelle"...
Info betreffend: WIESO Programm in Citrix-Session schließen und die momentane Vorstellung des Ablaufes:
2 Programme: Ein Updateprogramm und die Anwendung(die mehrfach in Instanzen ausgeführt wird)...
Delphi-Quellcode:
Firebird 2.1.0 . (via ZEOS)
Table: UPDATE_INFO
Field: UPDATE_EXISTS Boolean
Field: RUNNING_SYSTEMS Integer
Wird ein Update eingespielt, setzt das Updateprogramm UPDATE_EXISTS auf True, setzt RUNNING_SYSTEMS auf null und wartet 20 Sek.
Die Anwendung kontrolliert alle 15 Sek. den UPDATE_EXISTS-Wert. Ist der true, dann wird der Wert RUNNING_SYSTEMS um 1 erhöht und die UPDATE_EXISTS-Überprüfung abgebrochen. Hinweis an User: "Stell die Arbeit ein und schließe das Programm - in 5 Minuten wird es Zwangsgeschlossen" - zeitaufwändige Rechenoperationen sind ab nun nicht mehr möglich..
Beim OnClose der Anwendung wird der Wert RUNNING_SYSTEMS um 1 reduziert .. (aber nur, wenn Anwendung zuvor RUNNING_SYSTEMS um 1 erhöht hat)
Das Updateprogramm wartet so lange, bis RUNNING_SYSTEMS = 0 und ersetzt dann die Anwendungsdatei und setzt UPDATE_EXISTS auf False
Wenn Anwendung gestartet wird, und UPDATE_EXISTS auf True gesetzt ist - Anwendung sofort wieder schließen...
Probleme:
User startet Anwendung - Anwendung schließt sich aber sofort wieder, weil UPDATE_EXISTS=True (kein Showmessage oder so möglich )
User weiß eigentlich nicht - wann das Update fertig eingespielt ist, und er die Software wieder verwenden kann..
Umso mehr Spielraum beim "Zwangsschließen" (in dem Beispiel 5 Minuten) - umso länger müssen die anderen User warten, die sofort ausgestiegen sind.
Zufällig könnte die Anwendung genau dann gestartet werden, wenn sie gerade ersetzt wird.. dann schmiert entweder die Anwendung ab, oder das Updateprogramm kann die Anwendung nicht ersetzen, weil sie gerade verwendet wird.. da das Zeitfenster ja doch einigermaßen groß ist . (Software als Instanz starten, fbclient.dll als Instanz starten, Zeos aufbauen.. Verbindung herstellen --
Query´s öffnen .. UPDATE_EXISTS auslesen)
... mir wird erst jetzt bewußt, das nicht das "killen" der Instanz ein Problem darstellt, sondern die ganze Logistik
vielen Dank
Erich
Erich Wanker - for life:=1971 to lebensende do begin ..