Thema: Delphi Programm neustarten

Einzelnen Beitrag anzeigen

Benutzerbild von ErazerZ
ErazerZ

Registriert seit: 27. Mai 2005
Ort: Baden
315 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Programm neustarten

  Alt 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
  Mit Zitat antworten Zitat