Re: Doppelstart einer Anwendung
Das war auf jeden Fall schonmal ein Fehler.
So bekomme ich ein Handle. Allerdings funktioniert es dennoch nicht. Das mit dem kopieren/umbenennen ist übrigends, bei meiner Anwendung, egal. |
Re: Doppelstart einer Anwendung
Moin Lars,
das das Übertragen des Wertes nicht funktioniert, durfte wohl daran liegen, dass Du bei der Funktion CopyData das Handle des Mutex übergibst, nicht das des Hauptfensters der Anwendung, und ich vermute mal stark, dass an dieses Handle die Daten mit WM_COPYDATA geschickt werden sollen. Als String im Mutex würde ich prinzipiell etwas eindeutiges nehmen, z.B., eine GUID (STRG+SHIFT+G in der IDE um eine zu erzeugen) Man kann durchaus von der gleichen Stelle im Dateisystem ein Programm starten, ohne dass der Pfad gleich ist (Stichwort: SUBST) |
Re: Doppelstart einer Anwendung
Das mit dem Pfad ist ohnehin nicht möglich, aber meine Rede, eindeutiger Name.
@Hador: Wenns weiter nicht klappt, dann zeig' mal mehr Code, damit wir hier nicht herumraten müssen. :wink: |
Re: Doppelstart einer Anwendung
Moin Sunlight,
Zitat:
Da die Länge des Strings bei CreateMutex MAX_PATH ist wäre das möglich. |
Re: Doppelstart einer Anwendung
Moin Christian,
weil wie ich es vorhin zitiert habe, es darf kein '\' in dem Namen sein, das war der Fehler, warum das Handle immer 0 war. :wink: |
Re: Doppelstart einer Anwendung
Es ging mir eigentlich nur darum, dass sich die zweite Instanz des Programmes nicht schließt.
Kurz könnte man den Code daher auch so darstellen:
Delphi-Quellcode:
Und komischerweise hab ich grad bemerkt, dass er so auch funktioniert.
mHandle := CreateMutex(nil, True, '{E46EF2D5-34C6-4FC1-A3BA-E9A49C0327B0}');
if GetLastError = ERROR_ALREADY_EXISTS then Exit; So aber nicht:
Delphi-Quellcode:
Ist zwar jetzt für mein Problem unerheblich (Das Showmessage kann da ja weg) aber es würde mich doch interessieren, warum es so nicht funktioniert. Schreibt ShowMessage was in LastError rein?
mHandle := CreateMutex(nil, True, '{E46EF2D5-34C6-4FC1-A3BA-E9A49C0327B0}');
ShowMessage(IntToStr(mHandle)); if GetLastError = ERROR_ALREADY_EXISTS then Exit; EDIT: Auf jeden Fall schonmal danke für eure Antworten. |
Re: Doppelstart einer Anwendung
ich tippe ShowMessage schreibt den Lasterror (kann sein das es nur ein success ist).
|
Re: Doppelstart einer Anwendung
Jupp, U.a. 1411 :roll:
Das nervt mich immer :roll: Mach doch so:
Delphi-Quellcode:
mHandle := CreateMutex(nil, True, '{E46EF2D5-34C6-4FC1-A3BA-E9A49C0327B0}');
SavedError:=GetLastError; ShowMessage(IntToStr(mHandle)); if SavedError = ERROR_ALREADY_EXISTS then Exit; |
Re: Doppelstart einer Anwendung
|
Re: Doppelstart einer Anwendung
Okay, nachdem ich drauf geklickt habe, weiß ich, das Du nicht mich meinst :mrgreen:
Aber so was ähnliches wie in dem anderen Thread ist auch meine Methode :???: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 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