Das habe ich schon dadurch abefangen, dass FMutex nur gesetzt wird, wenn es keinen Fehler beim erzeugen gab.
Nein.
LMutex := CreateMutex(nil, True, pCHAR('test'));
Erzeugt immer ein neues
Handle.
Du kannst dsas mit dem Debugger auch leicht prüfen.
Oder, wenn du den Source so änderst, wirst du sehen, dass es das
Handle gibt:
Delphi-Quellcode:
LMutex := CreateMutex(
nil, True, pCHAR('
test'));
if (LMutex = 0)
or (GetLastError <> 0)
then
begin
MessageDlg(SysErrorMessage(GetLastError), mtInformation, [mbOk], 0);
// Durch diesen Code, wird das fehlerhafte Handle wieder freigegeben:
if LMutex <> 0
then
begin
ReleaseMutex(LMutex);
CloseHandle(LMutex);
end;
end
else
FMutex := LMutex;