Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Windows API / MS.NET Framework API (https://www.delphipraxis.net/20-library-windows-api-ms-net-framework-api/)
-   -   Delphi Doppelstart verhindern (https://www.delphipraxis.net/101-doppelstart-verhindern.html)

Luckie 11. Jun 2002 14:58


Doppelstart verhindern
 
Wie kann ich verhindern, daß mein Programm 2 mal (zur gleichen Zeit) gestartet wird ??

Unter 32Bit-Windows bedient man sich eines Mutex. Binde folgende Unit ein, du musst sie einfach nur deinem Projekt hinzufügen:
Delphi-Quellcode:
unit NichtDoppeltStarten;

interface

implementation

uses windows,Dialogs,sysutils;

var mHandle: THandle;   // Mutexhandle

Initialization
  mHandle := CreateMutex(nil,True,'xxxxx');
  // 'xxxxx' Der Anwendungsname ist hier einzutragen
  if GetLastError = ERROR_ALREADY_EXISTS then begin  
    // Anwendung läuft bereits
    {showMessage('Anwendung läuft bereits!!!!!');}   
    // Wenn du deine Meldung willst, mach die Klammern weg
    Halt;
  end;

finalization  // ... und Schluß
  if mHandle <> 0 then
    CloseHandle(mHandle)
end. {Dieter Hirt}
Um die Lösung nicht nur für den aktuell angemeldeten Benutzer greifen zu lassen (eine Programminstanz pro User), sonder für das ganze System (eine Programminstanz pro Rechner), bedarf es nur dem string 'Global\' als Präfix für den Mutexnamen.

[edit=Matze][code] durch [delphi]-Tags ersetzt. Mfg, Matze[/edit]
[edit=Dax]reformat. Mfg, Dax[/edit]
[edit=Dax]'Global\'-Tipp hinzugefügt. Mfg, Dax[/edit]

CalganX 25. Sep 2004 12:38

Re: Doppelstart verhindern
 
Liste der Anhänge anzeigen (Anzahl: 2)
Unser Forenuser Shaman hat für diese Funktion eine kleine Komponente geschrieben. Sie ist diesem Beitrag angehängt.
Zitat:

Zitat von Shaman
Wenn man nicht will, dass die Anwendung mehrmals gestartet werden kann, ist das ziemlich mühsam zu implementieren. Hier eine Komponente von mir, die man nur auf die Hauptform zu platzieren hat, um sich nicht mehr um das Thema kümmern zu müssen. Sie verhindert den Start einer zweiten Instanz und übergibt Kommandozeilen-Parameter und Fokus der ersten.

Oder man nimmt die Unit von NicoDE. ;)

[edit=Luckie]Nicos's Unit angehängt. Mfg, Luckie[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz