AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Verhindern das die gleich Exe gestartet wird
Thema durchsuchen
Ansicht
Themen-Optionen

Verhindern das die gleich Exe gestartet wird

Ein Thema von meisteralex · begonnen am 28. Nov 2005 · letzter Beitrag vom 29. Nov 2005
Antwort Antwort
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

Re: Verhindern das die gleich Exe gestartet wird

  Alt 28. Nov 2005, 10:43
AusZug aus dem EasyDelphiHelper:
Zitat:
Mehrfachstart verhindern
CreateMutex, Mutex, HPrevInst


--------------------------------------------------------------------------------

Über eine Mutex lässt sich verhindern, dass ein Programm mehrmals gestartet werden kann.

Die Mutex sollte zum frühstmöglichen Zeitpunkt erstellt werden. Man kann die Zeilen beispielsweise in einer eigenen Unit ablegen und diese an erster Stelle der Uses-Klausel schreiben.

Der dritte Parameter von CreateMutex vergibt einen Namen mit dem die Mutex im System identifiziert werden kann (z.B. den Programmnamen).

Der Projekt-Quelltext könnte dann in etwa so aussehen:
Delphi-Quellcode:
program Project1;

uses
 mutex in 'mutex.pas', //Hier wird das Mutex-Objekt erstellt.
 Forms,
 Unit1 in 'Unit1.pas{Form1};

{$R *.RES}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.
Die Unit für das Mutex-Objekt sieht folgendermaßen aus:
Delphi-Quellcode:
unit mutex;

interface

implementation

Uses Windows;

var
 mHandle: THandle;

initialization
 //Der Name für die Mutex muss natürlich angepasst werden
 mHandle := CreateMutex(Nil, True, PChar('Programmname'));

 if GetLastError = ERROR_ALREADY_EXISTS then
   //Die Bedingung trifft zu, wenn die Mutex schon existiert.
   //Dies ist der Fall, wenn das Programm bereits gestartet
   //wurde.
   Halt;

finalization
 if mHandle <> 0 then
   CloseHandle(mHandle);
end.
Für Delphi 1 (16 Bit) gibt es eine wesentlich einfachere Variante. Die Anwendung bekommt das Handle der letzten aktiven Instanz mitgeteilt. Man muss also nur nachsehen, ob die entsprechende Variable (HPrevInst) 0 enthält. Die Variable ist zwar auch in späteren Versionen noch verfügbar, erfüllt aber seit Delphi 2 keinen Zweck mehr.
EDIT: Als Programmname würd ich ExtractFileName(ParamStr(0)) empfehlen
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 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