Einzelnen Beitrag anzeigen

blackfin
(Gast)

n/a Beiträge
 
#13

AW: Wie kann ich mich selbst neu starten?

  Alt 13. Jun 2012, 12:20
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.

Geändert von blackfin (13. Jun 2012 um 12:27 Uhr)
  Mit Zitat antworten Zitat