![]() |
Re: Verhindern eine Anwendung mehrfach zu starten
Ich persönlich würde erst garnicht soweit gehen, die Dateigröße o.Ä. zu verwenden, es reicht doch eigentlich völlig aus, wenn man einen Inviduellen String benutzt (ok, der sollte jetzt nicht nur 1 Zeichen lang sein :lol: ). Ich glaube, da sind die Wahrscheinlichkeiten, dass ein anderes Programm einen Mutex anlegt, den Wert prüft und dann auch noch den gleichen Wert hat, schon relativ klein.
|
Re: Verhindern eine Anwendung mehrfach zu starten
Ja, schätze ich auch so ein. Schön wäre es aber, wenn dieser individuelle String automatisch in der Unit erzeugt wird - die will ich ja einfach nur (ohne weitere Arbeit) in das Projekt einfügen....
// edit: Noch ein letztes Mal nachgedacht: Das Umbenennen der Exedatei ist nur kritisch, wenn das Programm nach dem ersten Start umbenannt und unter neuem Namen erneut aufgerufen würde - nur dann greift der Test ins Leere. So viel Vorsatz sollte dann auch dadurch belohnt werden, das die zweite Instanz tatsächlich gestartet wird. Mein Fazit: Ich lasse meine Unit wie sie ist :wink: |
AW: Re: Verhindern eine Anwendung mehrfach zu starten
Zitat:
|
AW: Verhindern eine Anwendung mehrfach zu starten
Ja sicher.
|
AW: Verhindern eine Anwendung mehrfach zu starten
Ich wollte die hier
![]() Carsten |
AW: Verhindern eine Anwendung mehrfach zu starten
Es lebe Unicode ... der Code war noch aus Zeiten von vor 2009 :stupid:
Hab's nicht getestet, aber ich denke mal so müsste es aussehn:
Delphi-Quellcode:
{ 604 OneInstance.pas }
SetString(S, PChar(lpData), cbData div 2); cbData:= StrLen(lpData) * 2;
Delphi-Quellcode:
Bzw. wenn man es ganz genau nimmt, dann statt
{ 149 OneInst.pas }
cbData := cbData * 2; Result := GetMemory(cbData);
Delphi-Quellcode:
besser ein
2
Delphi-Quellcode:
.
SizeOf(Char)
Aber 100% richtiger wäre es, wenn man den Code "richtig" fest auf UnicodeString/WideString, PWideChar und 2 umstellt, anstatt String, PChar und SizeOf(Char). |
AW: Verhindern eine Anwendung mehrfach zu starten
Falls das nicht funktioniert, ich nutze seit Ewigkeiten "PBOnceOnly" geschrieben von Dr. Peter Below, funktioniert bei mir tadellos.
Einfachmal nach "PBOnceOnly" hier oder per google suchen. Ich habe leider nur noch eine von mir modifizierte Version, was ich modifizierte, abgesehen vom unit namen, habe ich aus dummheit nicht notiert aber es arbeitet tadellos mit Delphi Rio zusammen. |
AW: Verhindern eine Anwendung mehrfach zu starten
|
AW: Verhindern eine Anwendung mehrfach zu starten
Ich habe eine Lösung nur für Windows.
Verwende ich seit vielen Jahren in allen Programmen die es nötig haben. Keine extra Unit, keine Komponente (wäre eh viel zu spät), keine Kopfschmerzen. Das kommt direkt in die DPR:
Delphi-Quellcode:
Natürlich sollte man den Mutex am Ende immer freigeben.
// direkt nach begin
Mutex := CreateMutex(nil, True, 'EindeutigerName'); // das sollte am besten eine selbst erzeugte Class ID sein. Dann ist "eindeutig" recht sicher if (Mutex <> 0) and (GetLastError = 0) then MutexError := false else MutexError := true; ... // alles was das programm so macht ... // direkt vorm end if Mutex <> 0 then CloseHandle(Mutex); Aber zum Glück räumt auch Windows alles weg wenn der Prozess mal unerwartet übern Jordan geht. |
AW: Verhindern eine Anwendung mehrfach zu starten
Das ist die einfachste Lösung, wenn man sicherstellen will, dass ein Programm nur einmal gestartet wird.
Was diese Lösung aber nicht kann: Die übergebenen Parameter an die erste Instanz weiterreichen, damit diese damit weiterarbeiten kann. Und genau da liegt ja aktuell das Problem. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:28 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