Что нового

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

tar

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

joiner

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

tar

Новичок
Сообщения
52
Репутация
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

Меценат
Меценат
Сообщения
94
Репутация
28
Код:
#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

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

joiner

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


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

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

tar

Новичок
Сообщения
52
Репутация
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

Осваивающий
Сообщения
279
Репутация
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

Меценат
Меценат
Сообщения
94
Репутация
28
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 035
Репутация
503
xXx [?]
позволит вам выполнять ваши нескомпилированные скрипты при помощи данного скомпилированного скрипта на ОС где не установлен Autoit.
важно помнить, что если код имеет подключаемые библиотеки, то он работать не будет. лучше компилировать код в a3x , тогда он может быть запущен основным, скомпилированным, кодом
 
Верх