Ich mache das meistens so, dass ich der Anwendung über ShellExecute einen Parameter "-delayed" mitschicke, woraufhin die Anwendung am Anfang etwas wartet
(und die derzeitig laufende Instanz etwas Zeit bekommt, sich zu beenden):
Restart-Routine:
Delphi-Quellcode:
// Restart the Application
procedure ApplicationRestart(const Delayed: boolean = false);
var
AppName : PChar;
FParams : PChar ;
begin
AppName := PChar(Application.ExeName) ;
if Delayed then
begin
FParams := '-delayed' ;
end;
ShellExecute(Application.Handle,'open', AppName, FParams, nil, SW_SHOWNORMAL) ;
Application.Terminate;
end;
Und in der
dpr des Programms habe ich dann folgenden Code, der wartet, bevor die Hauptform erzeugt wird und die Anwendung gestartet wird:
Delphi-Quellcode:
begin
Application.Initialize;
Application.Title := 'Meine tolle Anwendung';
// delayed start of application
if (ParamCount > 0) then
begin
if (ParamStr(1) = '-delayed') then
begin
sleep(3000) ; // Wartezeit natürlich variabel :-)
end;
end;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.
Hat bisher immer super geklappt. Sollte das aus irgendwelchen Gründen Mist sein, bitte melden!
Natürlich kann man das verbessern...dass z.B. nicht der erste Parameter das "-delayed" sein muss und die Wartezeit auch als zusätzlicher Parameter mitgeschickt wird etc.