Ich hab einen Thread (geht aber auch ein Timer oder Dergleichen), der beim Programmstart das Änderungsdatum der eigenen EXE ausliest und zu Laufzeit regelmäßig mit dem aktuellen Datum des selben EXE-Namen vergleicht.
Bei Unterschied wird eine MessageBox mit Timeout geöffnet, der Neustart erbeten.
Über DataSnap (das "kleine"
RAD-Server) gibt es eine Notification, womit sich alle aktiven Programme manuell runterfahren/neu starten lassen.
Der Thread entstand, da die Notifications damals manchmal/ständig hingen. (Verbindung verreckte und es kam nichts mehr an)
Und die Prüfung im Thread, falls das Programm hängt. Reagiert die
GUI nicht rechtzeitig, dann kommt ein TerminateProcess. (PostMessage/TThread.Queue(Message+
Query), Sleep, PostMessage(Close), Sleep und letztendlich Terminate)
Existiert die EXE grade nicht, dann wird der Rest verzögert, damit während des Austauschs, wenn die neue EXE/
DLL/
BPL noch nicht komplett da sind, oder bei unterbrochener Netzwerkverbindung, nicht neu gestartet wird, weil das ja jetzt noch nicht geht.