-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
SanyaJoker |
27-02-2009 16:49 1050625 |
Время ожидания окончания работы программы
Доброго времени суток!
Возникла такая проблема необходимо запустить bat скрипт который в свою очередь выполняет свои задачи но при этом часто возникают ошибки о которых bat скрипт не знает и считает это продолжением своей работы. Я хочу реализовать на AutoIT запуск этого bat скрипта и по истечению определенного времени если bat скрипт не выполняется до конца AutoIT отсылал net send на определенные компьютеры что произошла ошибка. Как можно это реализовать в AutoIT?
Заранее благодарен!
|
Во-первых, как AutoIT должен определить, что "bat скрипт не выполняется до конца"?
Во-вторых, не проще ли в таком случае переписать весь BAT на AutoIT?
|
SanyaJoker |
02-03-2009 10:13 1052644 |
Ну я так думаю можно осуществить с помощью RunWait с ожиданием окончания запущенного скрипта можно конечно и перебить весть скрипт на AutoIT но суть проблемы остается та же если часть кода не выполняется определенное время нужно отослать net send на определенные компьютеры. Вот именно это у меня и не получается осуществить...
|
отослать NET SEND думаю тоже не проблема (или проблема?)... мне к примеру неясно, что значит "часть кода не выполняется определенное время"?.. в смысле "время выполнения CMD больше заданного интервала" или что-то другое?.. давайте без двусмысленностей в формулировках, а еще лучше выложить какой-никакой пример
|
SanyaJoker |
02-03-2009 14:12 1052843 |
Хорошо рассказываю дословно ситуацию. Есть сервер КПК на который через интернет сливают заявки бегающие в поле агенты, затем каждые 15 минут происходит выгрузка этих заявок из КПК в 1С, вот тут и возникает проблема. При выгрузке заявок из базы данных КПК в пост операцию забит этот самый батник который пинает 1С на их загрузку в базу. Но при этом бывает возникают проблемы как пример возьмем проблему занят каталог пользователя. 1С выдает при этом ошибку в ожидании вмешательства пользователя. В свою очередь батник все еще считает что задача выполняется и это может длится до бесконечности. Поэтому и хочется найти вариант если этот батник не выполнился так скажем за 10 минут отправить на определенные компьютеры net send о том что операция задержалась...
|
Цитата:
Цитата SanyaJoker
хочется найти вариант если этот батник не выполнился так скажем за 10 минут отправить на определенные компьютеры net send о том что операция задержалась »
|
если навскидку примерно так, при желании "NET SEND" можно переписать через UDF вместо CMD:
Код:
Dim $aCOMP[3] = ["COMP1","COMP2","COMP3"]
; Команда запуска скрипта
$CMD1 = @ComSpec & " /c " & 'C:\TEST\script.cmd'
$TEXT = "Текст сообщения"
; Запуск скрипта в скрытом окне
$PID = Run($CMD1, "", @SW_HIDE)
While 1
$RET = ProcessWaitClose ($PID, 600) ; ожидание завершения
If $RET Then ExitLoop ; выход при успехе
For $i=0 To UBound($aCOMP)-1 ; перебираем хосты
; Команда отправки сообщения очередному хосту
$CMD2 = @ComSpec & " /c " &'NET SEND '& $aCOMP[$i] &' "'& $TEXT &'"'
RunWait($CMD2, "", @SW_HIDE) ; запуск CMD команды в скрытом окне
Next
WEnd
З.Ы. извиняюсь, не было возможности протестировать
|
SanyaJoker |
03-03-2009 18:27 1053984 |
Скрипт запускается все работает. Вот тока ожидание завершения не проходит (то есть 1С выдает ошибку а скрип висит так понимаю у меня ожидание стоит 1 секунда). Перебил на свой лад тестил на минимальном времени ожидания завершения сейчас он выглядит так:
Код:
Dim $aCOMP[3] = ["admin1","admin3","kpk"]
; Команда запуска скрипта
$CMD1 = @ComSpec & " /c " & 'D:\1C\URBD\Vigr_KPK_ZEN.cmd'
$TEXT = "Задержалась выгрузка на 1cserver2"
; Запуск скрипта в скрытом окне
$PID = Run($CMD1, "", @SW_HIDE)
While 1
$RET = ProcessWaitClose ($PID, 1) ; ожидание завершения
If $RET Then ExitLoop ; выход при успехе
For $i=0 To UBound($aCOMP)-1 ; перебираем хосты
; Команда отправки сообщения очередному хосту
$CMD2 = @ComSpec & " /c " &'NET SEND '& $aCOMP[$i] &'"'& $TEXT &'"'
RunWait($CMD2, "", @SW_HIDE) ; запуск CMD команды в скрытом окне
Next
WEnd
Может чего то сделал не правильно?
|
Цитата:
Цитата SanyaJoker
1С выдает ошибку а скрип висит так понимаю у меня ожидание стоит 1 секунда »
|
скрипт крутится в бесконечном цикле, периодически (через 1 сек.) проверяя наличие процесса, если процесс в памяти - отрабатывает "NET SEND", если уже нет - выходит из цикла... т.е. только по завершению работы батника... разве не это было нужно?
...сообщения-то отправляются хоть?
|
SanyaJoker |
04-03-2009 10:42 1054566 |
Все правильно, как раз это и нужно но сообщение не отправляется.
|
Цитата:
Цитата SanyaJoker
но сообщение не отправляется »
|
а, понятно - я пропустил пробел между именем хоста и текстом сообщения (исправил), на будущее - отлаживать CMD нужно, заменив "/c" на "/k" (не закрывать окно) и убрав @SW_HIDE (отображать окно), тогда видно текст ошибки
|
SanyaJoker |
04-03-2009 14:33 1054742 |
Вот теперь все прекрасно работает :) Большое человеческое спасибо за помощь. Респект и уважуха amel27 :)
|
Время: 15:59.
© OSzone.net 2001-