Huhu,
ich möchte hier mal eine
Unit zur Verfügung stellen, die das Neustarten der eigenen Anwendung sehr leicht gestaltet. Als Nebeneffekt kann es auch nur maximal eine laufende Instanz der Anwendung geben.
Zuerst muss die
Unit in die
uses Liste der
.dpr (
Project -> View Source) am besten als erstes eingebunden werden. Danach sollte noch mittels
Strg+Shift+G eine
GUID erzeugt und mit der vorhandenen ersetzt werden. Anschließen muss die
Unit zusätzlich noch dort eingebunden werden, wo die Restart Methode aufgerufen werden soll, also z.B. in der Unit1.pas.
Kleines Beispiel:
Die .dpr
Delphi-Quellcode:
program Project1;
uses
// Unit einbinden \\
uApplicationRestarter
in '
uApplicationRestarter.pas',
// Alle weiteren Units ... \\
Forms,
Unit1
in '
Unit1.pas'
{Form1} ,
{$R *.res}
begin
// Diese zwei Zeilen einfügen und GUID abändern. \\
if not TApplicationRestarter.Initialize(Application.Handle, '
{33EB3B5C-9A2C-4E85-805C-FFD49C1AD468A}')
then
Exit;
// Ab hier gehts normal weiter \\
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Will man neu starten, dann einfach so:
Delphi-Quellcode:
uses uApplicationRestarter;
{...}
procedure TForm1.Button1Click(Sender: TObject);
begin
TApplicationRestarter.Restart;
end;
Restart() gibt einen Boolean zurück, bei False kann man mittels GetLastError mit dem genauen Fehlergrund weiterarbeiten. Das Ganze geht leider erst ab Delphi 2010. Die
Unit hab ich unter XE geschrieben und getestet, sollte aber auch unter 2010 laufen. Werde ich in den kommenden Tagen testen.
Für Verbesserungsvorschläge wär ich sehr dankbar.