![]() |
Doppelstart einer Anwendung
Hallo,
ich versuche grad den doppelstart einer Anwendung zu verhindern. Dazu hab ich in der CodeLib einen ![]() Meine Umsetzung sieht folgendermaßen aus:
Delphi-Quellcode:
Mein Problem ist nur, dass es so aus irgendeinem Grund nicht funktioniert.
var
mHandle: THandle; i: Integer; begin mHandle := CreateMutex(nil, True, PAnsiChar(ParamStr(0))); if GetLastError = ERROR_ALREADY_EXISTS then begin for i := 1 to ParamCount do CopyData(mHandle, ParamStr(i)); // Parameter der 1. Instanz übergeben Application.Terminate; end; Application.Initialize; // Ggf. Formulare erzeugen Application.CreateForm(TGUI, GUI); Application.Run; if mHandle <> 0 then CloseHandle(mHandle) end. Nur der Grund ist mir nicht bekannt :| Ich hoffe also mal wieder auf euch :wink: |
Re: Doppelstart einer Anwendung
Und was funktioniert nicht?
Übrigens: Statt Application.Terminate ein Exit; :wink: |
Re: Doppelstart einer Anwendung
Der Sinn dieses Codes soll sein, dass die Anwendung nicht doppelt gestartet wird.
Und genau das funktioniert nicht. Ob Exit oder App.Terminate ist egal. |
Re: Doppelstart einer Anwendung
Hi,
was liefert dir mHandle, wenn deine Anwendung bereits läuft und was wenn sie nicht läuft? |
Re: Doppelstart einer Anwendung
Jeweils 0
Also sollte es daran liegen, aber ich weiß immer noch nicht, was faclsch ist. |
Re: Doppelstart einer Anwendung
Das liegt daran, das Du Deinen Pfad & Dateinamen übergibst, verwende einen eindeutigen Namen, dann klappts.
Den Fehlercode von GetLastError beachten. :wink: Edit: Und dennoch: Statt Application.Terminate ein Exit; :wink: |
Re: Doppelstart einer Anwendung
Ich zitiere mal das msdn:
Zitat:
|
Re: Doppelstart einer Anwendung
ERROR_PATH_NOT_FOUND (3) = 'Pfad nicht gefunden'
|
Re: Doppelstart einer Anwendung
Der Pfadname kann variieren, er sollte allerdings konstant sein, ansonsten bräuchte man das Programm nur in einen anderen Ordner kopieren und starten. Habe das ganze nicht getestet, meine Vermutung sollte dennoch stimmen.
|
Re: Doppelstart einer Anwendung
Zitat:
Edit: Also wenn schon, dann ExtractFileName(ParamStr(0)); Aber wenn man die Exe kopiert, umbenennt und nochmal startet... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 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