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.