Registriert seit: 27. Mai 2005
Ort: Baden
315 Beiträge
Delphi 2007 Enterprise
|
Re: Programm neustarten
21. Mär 2006, 20:11
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:
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.
// und das hier ist die funktion wo neustarten gemacht wird
Delphi-Quellcode:
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;
cya, ErazerZ
|
|
Zitat
|