Ich habe eine Lösung nur für Windows.
Verwende ich seit vielen Jahren in allen Programmen die es nötig haben.
Keine extra
Unit, keine Komponente (wäre eh viel zu spät), keine Kopfschmerzen.
Das kommt direkt in die
DPR:
Delphi-Quellcode:
// direkt nach begin
Mutex := CreateMutex(
nil, True, '
EindeutigerName');
// das sollte am besten eine selbst erzeugte Class ID sein. Dann ist "eindeutig" recht sicher
if (
Mutex <> 0)
and (GetLastError = 0)
then
MutexError := false
else
MutexError := true;
...
// alles was das programm so macht
...
// direkt vorm end
if Mutex <> 0
then
CloseHandle(
Mutex);
Natürlich sollte man den
Mutex am Ende immer freigeben.
Aber zum Glück räumt auch Windows alles weg wenn der Prozess mal unerwartet übern Jordan geht.