Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Как можно предотвратить запуск сразу нескольких копий одной программы??? (http://forum.oszone.net/showthread.php?t=135597)

sashadeg 23-03-2009 17:07 1072264

Как можно предотвратить запуск сразу нескольких копий одной программы???
 
Вопрос изложен в названии темы =)

Creat0R 23-03-2009 23:35 1072664

Ответ изложен в справке...

См. _SingleTon()

morgan1991 31-03-2009 23:28 1080594

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 1080599

Функция _Singleton обращается к dll windows kernel32.dll и создает в памяти как бы метку
для порграммы с тектом "test\test".

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

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

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

morgan1991 31-03-2009 23:46 1080608

Значит у меня чтото не так? Этот скрипт у меня всё время функция возвращает 0 выдаёт:
Цитата:

Цитата morgan1991
Msgbox(0,"Warning","An occurence of test is already running") »


Creat0R 31-03-2009 23:51 1080612

Цитата:

Цитата morgan1991
Этот скрипт у меня всё время выдаёт »

Странно... а в процессах нет AutoIt3.exe от первых запусков?

morgan1991 31-03-2009 23:56 1080619

Цитата:

Цитата Creat0R
а в процессах нет AutoIt3.exe от первых запусков? »

нету, зато я заметил если заменить _Singleton("test\test",1) на _Singleton("kjgfkjgg",1) то всё работает.

Creat0R 01-04-2009 00:21 1080641

Цитата:

Цитата morgan1991
если заменить _Singleton("test\test",1) на _Singleton("kjgfkjgg",1) то всё работает »

Значит есть уже подобная инстанция (test\test), после перезапуска системы должен и тот пример работать.

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

proxy 01-04-2009 00:51 1080670

...иль так:

Код:

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

#region: - Одна копия программы

    If $YesSingleton == 1 AND _Singleton($sProIDText, 1) == 0 Then _Pro_Exit()
#endregion

Func _Pro_Exit()
    Exit
EndFunc



Время: 02:47.

Время: 02:47.
© OSzone.net 2001-