Это всё не работает под терминальными режимами и т.п. когда много пользователей. Я использую костыльное решение для пользователей терминального режима. Запустить может только один, у остальных будет срабатывать EXIT:
создаём файл $PathIni и туда пишем чnj-нибудь. но постоянно. чтобы у файла всегда менялся атрибут последнего доступа.
$arrayDateTimeStampINI= FileGetTime($PathIni, $FT_ACCESSED, $FT_ARRAY)
$sDateTimeStampINI=$arrayDateTimeStampINI[0]&"/"&$arrayDateTimeStampINI[1]&"/"&$arrayDateTimeStampINI[2]&" "&$arrayDateTimeStampINI[3]&":"&$arrayDateTimeStampINI[4]&":"&$arrayDateTimeStampINI[5]
sleep (1000)
$sNowDateSec=@YEAR &"/"& @MON &"/"& @MDAY &" "& @HOUR &":"& @MIN &":"& @SEC
$iDateCalc = _DateDiff('s', $sDateTimeStampINI, $sNowDateSec)
if $iDateCalc < 4 then
MsgBox($MB_SYSTEMMODAL, "Внимание!", "Приложение уже работает!")
FileStatWrite(" Скрипт is already running from another user=" & $iDateCalc)
Exit
EndIf