Wenn du glück hast, kommt das
OS auf die Idee und Cacht den Code.
Ein Programm startet unter dem selben Namen, wie ein schon/noch Laufendes, also kann ich ja dessen bereits geladendenen Code doch gleich mit verwenden.
Und es ist nicht sicher immer möglich, daß eine Anwendung einfach so umbenannt werden kann, wenn sie gerade geöffnet ist,
was natürlich voll blöd ist, daß der TE praktisch keinerlei Fehlerprüfung in seinen Code eingebaut hat.
Der TStream wirft zwar Exceptions, aber bei RenameFile, ShellExecute und DeleteFile wird das Result und der Fehlercode einfach ignoriert.
PS:
Warum ist der Updaten-Code eigentlich nicht in TForm1 drin, wo er doch ständ Dinge davon verwendet?
Oder Warum bekommt er die Dinge, welche er einfach so verwendet, nicht als Parameter rein?