![]() |
Programm neustarten
Hallo!
Ich habe eine Application, die ich neustaren möchte. An sich kein Problem, ShellExcecute und Application.Terminate. Aber: Das Programm ist leider so konzepiert, dass es nur einmal geöffnet sein kann! Demnach funktionniert das alles nicht! :wall: Wie kann ich jetzt das Programm starten, nachdem es beendet wurde??? |
Re: Programm neustarten
Hi
Du könntest beim Neustarten einen Parameter mitgeben, den du auswertest. Ist dieser Paremeter gesetzt, lässt sich das Programm zweimal starten, ansonsten eben nur einmal. Keine Ahnung, ob das die beste Möglichkeit ist, doch das ist mir dazu gerade eingefallen. |
Re: Programm neustarten
Oder du startest über ein drittes Programm, ein kleines Hilfsprogramm deine Applikation neu.
mfG Markus |
Re: Programm neustarten
Muss ich wohl so machen. Schade, dass es da keinen Befehl gibt.
Trotzdem Danke! |
Re: Programm neustarten
Oder du läßt das Programm beim Start ein/zwei Sekunden warten, bevor es prüft ob es schonmal gestartet wurde, damit die andere Instanz genug Zeit hat, um sich zu beenden.
|
Re: Programm neustarten
Mit ner Batch müsste das evtl. auch gehen?!
|
Re: Programm neustarten
Hi,
evtl. hilft eine Bat-Datei:
Delphi-Quellcode:
in meinem Test hat es so funktioniert... (muss evtl. noch verfeinert werden)
procedure TForm1.Button1Click(Sender: TObject);
var sl:Tstringlist; begin sl:=TStringlist.create; //evtl. wird hier eine verzögerung benötigt (kann mittels ping realisiert werden) sl.Add('start '+paramstr(0)); sl.add('del %0'); sl.savetofile(extractfilepath(paramstr(0))+'test.bat'); sl.free; application.terminate; end; procedure TForm1.FormDestroy(Sender: TObject); begin winexec(PCHAR(extractfilepath(paramstr(0))+'test.bat'),sw_hide); end; Gruß Frank |
Re: Programm neustarten
hey,
es geht auch ohne ne bat datei, dazu musst du (falls du CreateMutex benutzt) einfach das public deklarieren, und vor dem neustarten einfach das handle schließen zb: // DPR datei
Delphi-Quellcode:
// und das hier ist die funktion wo neustarten gemacht wird
program Project1;
uses Windows, Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} var hMutex: THandle; begin hMutex := CreateMutex(nil, True, 'MeinProgram'); if (GetLastError = ERROR_ALREADY_EXISTS) then begin CloseHandle(hMutex); MessageBox(0, 'Sie können nicht das Prog nur einmal starten', 'App', MB_ICONERROR); ExitProcess(0); end; Application.Initialize; Application.CreateForm(TForm1, Form1); Form1.hMutex := hMutex; // wo die form erstellt wurde dann in form1, das übergeben, macht man es vor dem createform dann kommt es zu einer zugriffsverletzung .. Application.Run; end.
Delphi-Quellcode:
cya, ErazerZ
uses
ShellApi; type TForm1 = class(TForm) btnNeustarten: TButton; procedure btnNeustartenClick(Sender: TObject); private { Private declarations } public hMutex: THandle; { Public declarations } end; procedure TForm1.btnNeustartenClick(Sender: TObject); begin // zuerst schließen wir das mutex handle und dann einfach ShellExecute, Terminate .. CloseHandle(hMutex); ShellExecute(Handle, 'open', PChar(Application.ExeName), nil, nil, SW_NORMAL); Application.Terminate; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz