Einzelnen Beitrag anzeigen

Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#1

CreateMutex() verhält sich komisch

  Alt 23. Apr 2020, 14:18
Ich muss einen Bug in einer 10 Jahre alten App fixen, die seit Windows update v1909 nicht mehr korrekt funktioniert.

Man soll nur eine Instanz der Exeutable starten können.

Der alte Code der nicht mehr funktioniert schaut so aus:
Code:
  MutexHandle := CreateMutex(nil, True, 'NameOfTheApp');
  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
   log('errorcode is ERROR_ALREADY_EXISTS, bring app to front');
   ...
  end else
  begin
   log('errorcode is *NOT* ERROR_ALREADY_EXISTS, app darf weiter laufen');
   ...
  end;
10 Jahre lang, wenn man die Executable zum zweiten mal startete war das MutexHandle das gleiche wie bei der ersten Instanz, und GetLastError war ERROR_ALREADY_EXISTS. Nun ist der Handle des Mutex bei jedem Start der Exe ein neuer Handle und damit kommt ERROR_ALREADY_EXISTS nie zu stande, d.h. eine zweite Instanz der Exe wird gestartet.

Weiß jemand vielleicht wieso dieses Verhalten plötzlich da ist, und was man als Alternative zum CreateMutex nehmen könnte? FindWindow kommt nicht in Frage, weil die App nicht immer mit einem Fenster startet.
  Mit Zitat antworten Zitat