Что нового

Контроль работы срипта

tar

Новичок
Сообщения
58
Репутация
0
Приветствую. Как узнать что сктипт "test.su3" работает - запущен? Если не запущен, то запустить его.
 

joiner

Модератор
Локальный модератор
Сообщения
3 200
Репутация
540
Код:
ProcessExists
 
Автор
T

tar

Новичок
Сообщения
58
Репутация
0
joiner Спасибо, не соображу как построить чтобы 10 раз запускать скрипт если не запущен.
Код:
$i = 0
Do
   
If ProcessExists("test.au3") Then
    Sleep(10000)
Else
   Run( @ScriptDir & "\test.au3")
   $i = $i + 1 
EndIf
Until $i = 10 ;

или надо чтобы контролируемый скрипт был скомпилирован?
 

xXx

Меценат
Меценат
Сообщения
166
Репутация
55
Код:
#include <WinAPIProc.au3>
Global $hToken, $aAdjust, $aProcList, $sScipt, $sStr

$sScipt = @ScriptDir & '\Script.au3' ; Проверяемый скрипт
$sStr = 'Скрипт: "' & $sScipt & '"' & @LF & 'Выполняет программа:' & @LF

$hToken = _WinAPI_OpenProcessToken(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
_WinAPI_AdjustTokenPrivileges($hToken, $SE_DEBUG_NAME, $SE_PRIVILEGE_ENABLED, $aAdjust)

$aProcList = ProcessList()
$sScipt = StringReplace($sScipt, '"', '')
For $i = 1 To $aProcList[0][0]
	$sCommLine = StringReplace(_WinAPI_GetProcessCommandLine($aProcList[$i][1]), '"', '')
	If Not StringCompare($sCommLine, $sScipt) Then _
			$sStr &= ' - "' & _WinAPI_GetProcessFileName($aProcList[$i][1]) & '" (PID: ' & $aProcList[$i][1] & ')' & @LF
Next
_WinAPI_AdjustTokenPrivileges($hToken, $aAdjust, 0, $aAdjust)
If $hToken Then _WinAPI_CloseHandle($hToken)

MsgBox(262144, Default, $sStr)


В x64 разрядной ОС лучше запускайте скрипт как x64.


Добавлено:
Сообщение автоматически объединено:

Изменил немного.
 
Автор
T

tar

Новичок
Сообщения
58
Репутация
0
xXx Спасибо, но у меня не запускает. Windows7. Сначала просил задекларировать $TOKEN_ADJUST_PRIVILEGES,$TOKEN_QUERY,$SE_DEBUG_NAME,$SE_PRIVILEGE_ENABLED
После добавления их в глобальные, доходит до MsgBox но test.au3 не запускает ни как х64 из контекстного, ни скомпилированный в х64
 

joiner

Модератор
Локальный модератор
Сообщения
3 200
Репутация
540
компилируешь, естественно, запускаешь и получаешь pid процесса, далее в цикле проверяешь его существование, если нет, то опять запуск


Добавлено:
Сообщение автоматически объединено:

если нужно, чтобы код работал постоянно, то зацикли его. зачем нужны проверки? если хочешь избежать принудительного завершения, то в код test через fileinstall включи екзешник с кодом проверки. запускаешь test, он в папку temp скидывает второй экзешник и запускает его. этот второй будет следить за работой своего "родителя"
 
Автор
T

tar

Новичок
Сообщения
58
Репутация
0
joiner процесс в диспетчере виден как test.exe*32
но не работает

Код:
$i = 0
Do
   
If ProcessExists("test.exe") Then
    Sleep(10000)
Else
  Run( "test.exe")
   $i = $i + 1 
EndIf
Until $i = 10 ;


про FileInstall() не понял, куда.
 

pvnn

Осваивающий
Сообщения
281
Репутация
29
tar, проверил, скрипт на Win7 x64 у меня работает.
Может проблема в винде?
Попробуйте запустить скрипт на другой машине
Код:
[email protected]&'\test.exe'
Local $i=0
Do
	If Not ProcessExists("test.exe") Then
		 RunWait(@COMSPEC & ' /c '&'"'&$Command&'"', "",@SW_HIDE) ; ShellExecute($Command)
		$i+=1
		ConsoleWrite(@CRLF&'Запущен: '&$i)
	EndIf
	Sleep(300)
Until $i=10
 

xXx

Меценат
Меценат
Сообщения
166
Репутация
55
tar сказал(а):
как построить чтобы 10 раз запускать скрипт если не запущен.
Код:
#pragma compile(AutoItExecuteAllowed, True)
#include <WinAPIProc.au3>
Global $sMyScipt = @ScriptDir & '\test.au3' ; Проверяемый НЕскомпилированный скрипт

$sMyScipt = StringReplace($sMyScipt, '"', '')
For $i = 1 To 10
	$aProcList = ProcessList()
	If Not @error Then
		For $j = 1 To $aProcList[0][0]
			If Not StringCompare(StringReplace(_WinAPI_GetProcessCommandLine($aProcList[$j][1]), '"', ''), $sMyScipt) Then
				ProcessWaitClose($aProcList[$j][1])
				ExitLoop
			EndIf
		Next
	EndIf
	RunWait('"' & @AutoItExe & '" /AutoIt3ExecuteScript "' & $sMyScipt & '"', '', @SW_HIDE)
Next


Директива:
Код:
#pragma compile(AutoItExecuteAllowed, True)

позволит вам выполнять нескомпилированные подконтрольные скрипты при помощи данного скомпилированного скрипта на ОС где не установлен Autoit.
 

joiner

Модератор
Локальный модератор
Сообщения
3 200
Репутация
540
xXx [?]
позволит вам выполнять ваши нескомпилированные скрипты при помощи данного скомпилированного скрипта на ОС где не установлен Autoit.
важно помнить, что если код имеет подключаемые библиотеки, то он работать не будет. лучше компилировать код в a3x , тогда он может быть запущен основным, скомпилированным, кодом
 
Верх