![]() |
Verhindern das die gleich Exe gestartet wird
Moint,
also mittlerweile weiß ich wie ich verhindern kann, dass zweimal das gleich Programm gestartet wird. Habe das mit der marix-Methode realisiert (hoffe die sagt jemandem was, hab sie aber glaub ich auch aus diesem Forum). Nun will ich aber nicht generell verhindern, dass mein Programm zweimal gestartet wird, sondern nur dass die gleiche exe zweimal gestartet wird. Sprich, wenn ich 2 identische Exe habe, wovon einen nr1.exe heißt und eine nr2.exe, dann soll ein Doppelstart möglich sein. Habe ich jedoch 2 Exes mit dem gleichen Namen nr1.exe und nr1.exe soll ein Merhfachstart verhindert werden. Dies alles soll unabhängig sein von den Pfaden in denen die exe-Dateien liegen. Hat hierzu jemand ne Lösung ? weiß nämlich irgendwie nciht recht wie ich das machen soll?!?! |
Re: Verhindern das die gleich Exe gestartet wird
Hai meisteralex,
deine "marix-Methode" kenn ich nicht. Ich mache das immer mit einem Mutex so wie ![]() Jetzt kannst Du ja als "String für den Mutex" einfach den Namen der Exe plus einer GUID verwenden.
Delphi-Quellcode:
begin
. . mutexstring := '{1F31C742-E52D-4EC0-8632-02BEAFA3337E}' + ExtractFileName(ParamtStr(0)); mHandle := CreateMutex(nil,True,mutexstring); . . end; |
Re: Verhindern das die gleich Exe gestartet wird
Wenn Du die EXE selbst geschrieben hast, dann würd ich das auch über 'Mutexe' abbilden. Wenn nicht, hilft Dir 'FindWindows' weiter. Es liefert Dir, sofern vorhanden, das Handle eines Fensters mit einer bestimmten Titelzeile und einem Klassennamen. Wenn FindWindows einen Wert<>0 liefert, läuft das Programm schon.
Du musst nur noch rausfinden, wie die Fensterklasse (und ggf. der Titel) des Hauptfensters der Anwendung heisst. Dafür verwende ich EnumWindows. Ich hab mir mal ein kleines Programm geschrieben, das die Fenstertitel und Fensterklassen auflistet. Check mal EnumWindows, das ist dann ganz einfach. |
Re: Verhindern das die gleich Exe gestartet wird
genau, meinte auch mutex
genau so habe ich es auch schon probiert, als argument habe ich den konstaten string gegen den paramstr(0), also den exe-namen ausgetauscht. Wozu ist die GUID denn noch nötig? Wenn ich den EXE-Namen mit Hilfe von parmastr(0) als Argument der CreateMutex - Anweisung übergebe kann ich auch 2 mal die gleiche Datei ausführen, der "mehrfachstar-verhinderungs-effekt" ist also vollkommen weg. Hat das irgendwas mit der GUID zu tun`? |
Re: Verhindern das die gleich Exe gestartet wird
Zitat:
bitte beachte aber das Du mit ParamStr(0) nicht nur den Exe-Namen sondern auch den Pfad zu dieser bekommst. Wenn die selbe Exe in zwei Verzeichnissen liegt hast Du verschiedene Strings. Zitat:
|
Re: Verhindern das die gleich Exe gestartet wird
Es war aber eine Datei aus dem gleichen Verzeichnis, welche sich auch 2 mal aufrufen ließe.
Jemand ne Ahnung warum ? Das mit der GUID ist logisch, aber ich könnte genau so gut einen anderen eindeutigen String nehmen oder? |
Re: Verhindern das die gleich Exe gestartet wird
Moin...
ich hab das folgendermassen realisiert :
Delphi-Quellcode:
und halt oben noch mhandle als thandle deklariert.
initialization
mHandle := CreateMutex(nil, true, 'meinprogramm'); if (GetLastError = Error_Already_Exists) then halt; finalization if mHandle <> 0 then CloseHandle(mHandle); Das wars bei mir soweit und geht. MFG Carsten |
Re: Verhindern das die gleich Exe gestartet wird
Zitat:
Du willst ja dass 2 verschieden namige Echsen auch starten dürfen. |
Re: Verhindern das die gleich Exe gestartet wird
Delphi-Quellcode:
So das ist mein Code und trotzdem lässt sich eine EXE in meinem falle ist das (C:\hey.exe) 2x starten, bziehungsweise beliebig oft starten
unit mulex;
interface implementation uses windows,Dialogs,sysutils; var mHandle: THandle; Initialization mHandle := CreateMutex(nil,True,paramstr(0)); // 'xxxxx' Der Anwendungsname ist hier einzutragen if GetLastError = ERROR_ALREADY_EXISTS then begin // Anwendung läuft bereits showMessage('Anwendung läuft bereits!!!!!'); Halt; end; finalization if mHandle <> 0 then CloseHandle(mHandle) end. {Dieter Hirt} |
Re: Verhindern das die gleich Exe gestartet wird
Hmm... das ist ja seltsam.
Wenn man den Code aus der Code-Library nimmt und als "String" ParamStr(0) verwendet funktioniert es nicht.
Delphi-Quellcode:
mString := ParamStr(0); // So geht es nicht
mHandle := CreateMutex(nil, True, PAnsiChar(mString)); mString := 'blubber'; // so geht es mHandle := CreateMutex(nil, True, PAnsiChar(mString)); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 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 by Thomas Breitkreuz