Войти

Показать полную графическую версию : [решено] Как можно предотвратить запуск сразу нескольких копий одной программы???


sashadeg
23-03-2009, 17:07
Вопрос изложен в названии темы =)

Creat0R
23-03-2009, 23:35
Ответ изложен в справке...

См. _SingleTon()

morgan1991
31-03-2009, 23:28
Creat0R, вот нарыл в справке:

#include "Misc.au3"
if _Singleton("test\test",1) = 0 Then
Msgbox(0,"Warning","An occurence of test is already running")
Exit
EndIf
Msgbox(0,"OK","the first occurence of test is running")
Не поможете разобраться? А то я ни чего не понял.

proxy
31-03-2009, 23:33
Функция _Singleton обращается к dll windows kernel32.dll и создает в памяти как бы метку
для порграммы с тектом "test\test".

При повторном запуске скрипта _Singleton снова создает метку
и выясняется, что такова уже есть.

Получив отказ, _Singleton обижается и возвращает нолик.

Сооственно If информирует Вас Msgbox-ом и далее закрывает
вторично запущенный скрипт... )

morgan1991
31-03-2009, 23:46
Значит у меня чтото не так? Этот скрипт у меня всё время функция возвращает 0 выдаёт:
Msgbox(0,"Warning","An occurence of test is already running") »

Creat0R
31-03-2009, 23:51
Этот скрипт у меня всё время выдаёт »
Странно... а в процессах нет AutoIt3.exe от первых запусков?

morgan1991
31-03-2009, 23:56
а в процессах нет AutoIt3.exe от первых запусков? »
нету, зато я заметил если заменить _Singleton("test\test",1) на _Singleton("kjgfkjgg",1) то всё работает.

Creat0R
01-04-2009, 00:21
если заменить _Singleton("test\test",1) на _Singleton("kjgfkjgg",1) то всё работает »
Значит есть уже подобная инстанция (test\test), после перезапуска системы должен и тот пример работать.

Вообще можно так использовать: _Singleton(@ScriptName, 1)
Но это привязка к имени скрипта (т.е если переименовать скрипт, то повторная копия будет запущена).

proxy
01-04-2009, 00:51
...иль так:

#region: - Global: Название и версия программы, ProID
Global $sProName, $sProVerNO, $sProVer, $sProNameVer, $sProIDText
$sProName = 'Test'
$sProVerNO = '0.1'
$sProVer = 'v' & $sProVerNO
$sProNameVer = $sProName & ' ' & $sProVer
$sProIDText = $sProNameVer & ' ' & $sProNameVer
[i]#endregion

#region: - Одна копия программы
If $YesSingleton == 1 AND _Singleton($sProIDText, 1) == 0 Then _Pro_Exit()
#endregion

Func _Pro_Exit()
Exit
EndFunc




© OSzone.net 2001-2012