Always make sure that you release the semaphore, because it does not run automatically if your application dies.
program Project72; {$APPTYPE CONSOLE} uses Windows, SysUtils; var hSem: THandle; begin try hSem := CreateSemaphore(nil, 3, 3, 'C15F8F92-2620-4F3C-B8EA-A27285F870DC/myApp'); Win32Check(hSem <> 0); try if WaitForSingleObject(hSem, 0) <> WAIT_OBJECT_0 then Writeln('Cannot execute, 3 instances already running') else begin try // place your code here Writeln('Running, press Enter to stop ...'); Readln; finally ReleaseSemaphore(hSem, 1, nil); end; end; finally CloseHandle(hSem); end; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.
gabr source share