Wie kann ich verhindern, daß meine Anwendung mehrmals gestartet wird?


Dafür gibt es in Window eine Art Markierung, die sog. Mutex. In diesem Beispiel wird solch ein Mutex beim ersten Programmstart erzeugt, beim zweiten Start kann dann keine Markierung mehr unter demselben Namen erzeugt werden und die zweite Instanz bricht ab:

unit NichtDoppeltStarten;

interface

implementation

uses windows, Dialogs, sysutils;

var mHandle: THandle;

Initialization
  mHandle := CreateMutex(nil,True,'xxxxx');
// 'xxxxx' ist eine eindeutige Kennung, z.B. der Anwendungsname
  if GetLastError = ERROR_ALREADY_EXISTS then begin   
    showMessage('Anwendung läuft bereits');
    Halt;
  end; 

finalization
  if mHandle<>0 then 
    CloseHandle(mHandle)
end.

Tip von Dieter Hirt

Delphi 1 Delphi 2 Delphi 3 Delphi 4
nicht getestet Version nicht betroffen getestet

siehe auch:


Delphi FAQ