Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Mehrere Instanzen verhindern (https://www.delphipraxis.net/9230-mehrere-instanzen-verhindern.html)

Rapthor 21. Sep 2003 11:58


Mehrere Instanzen verhindern
 
Habe folgendes in meiner Unit1 zu stehen:

Delphi-Quellcode:
Initialization //Verhindern, dass das Programm mehrmals gestartet wird
   mHandle := CreateMutex(nil, True, 'Festung.exe');
     if GetLastError = ERROR_ALREADY_EXISTS then
     begin
       ShowMessage('Programm wird bereits ausgeführt');
       Halt;
     end;

finalization
   if mHandle <> 0 then
     CloseHandle(mHandle);
Hierbei wird verhindert, dass ein Programm namens Festung.exe doppelt ausgeführt wird. Was muss ich jetzt machen, damit die Prozedur auch überprüft , ob eine client.exe schon läuft? Denn in diesem Falle soll der gleiche Effekt auftreten, wie wenn Festung.exe schon ausgeführt wurde.

Luckie 21. Sep 2003 12:03

Re: Mehrere Instanzen verhindern
 
In dem du auch eien Muztex für die client.exe erstellst? :roll:

Chewie 21. Sep 2003 12:05

Re: Mehrere Instanzen verhindern
 
Ich glaub du verwechselst da was. Der dritte Parameter von CreateMutex gibt einfach einen String an, der den Mutex identifiziert. In diesem Fall hast du "Festung.exe" verwendet, was wohl der Name der Anwendung ist, du könntest aber auch jeden anderen Bezeichner verwenden. Name des Mutex und Name der Anwendung können natürlich übereinstimmen, müssen es aber nicht.

Rapthor 21. Sep 2003 12:58

Re: Mehrere Instanzen verhindern
 
Zitat:

In dem du auch eien Muztex für die client.exe erstellst?
So ?

Delphi-Quellcode:
Initialization //Verhindern, dass das Programm mehrmals gestartet wird
   mHandle := CreateMutex(nil, True, 'Festung.exe');
     if GetLastError = ERROR_ALREADY_EXISTS then
     begin
       ShowMessage('Programm wird bereits ausgeführt');
       Halt;
     end;

   mHandle := CreateMutex(nil, True, 'client.exe');
     if GetLastError = ERROR_ALREADY_EXISTS then
     begin
       ShowMessage('client.exe läuft bereits');
       Halt;
     end;

finalization
   if mHandle <> 0 then
     CloseHandle(mHandle);
Das bringt bei mir aber garnichts. Der startet trotzdem fröhlich, obwohl client.exe läuft.

Christian Seehase 21. Sep 2003 13:03

Re: Mehrere Instanzen verhindern
 
Moin Rapthor,

lies Dir doch noch mal Chewies Beitrag durch.

Verallgemeinert:
Das Programm, dass nur einmal gestartet werden soll muss prüfen, ob es schon läuft.
In einem anderen Programm kann man dann natürlich auch testen, ob das der Fall ist. Ob das Sinn macht hängt natürlich vom Zusammenhang ab.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 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