Вверх ↑
Этот топик читают: Гость
Ответов: 704
Рейтинг: 7
#1: 2018-10-11 23:47:18 ЛС | профиль | цитата
Здравствуйте! Хочу загрузчик как бы для основной программы наваять, который бы проверял нужные параметры и вдруг чего перезапускал ее (работа с железками через COM-порт и прочие внешние устройства требует надзора).

В этой задаче проблемы нет. Но вот пока совершенствую программу, бывали ошибки Exeption и прочие радости. Их можно как-то отследить для перезапуска программы? Может есть какой компонент для этого, а я пропустил?
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 1342
Рейтинг: 31
#2: 2018-10-12 00:06:29 ЛС | профиль | цитата
Конечно есть, лично сам пользуюсь автоперезапуском при крашах приложений, работает по такой схеме:

ведёт логи, ловит, перезапускает убитое приложение...ну думаю разберётесь))
..........
так же особенность, есть проверка на какие приложения в какой папке реагировать, дабы не вылезать за рамки скажем своих утилит, которые надеюсь лежат в одной папочке)

если есть желаение можно в логи ещё и скриншоты ошибок сохранять, просто брать Handle ошибок и делать скриншот, сохраняя их в ту же папку что логи, под именем из точной даты, а далее сверять всё по логам, если конечно это нужно
Add(StrMask,5234971,742,196)
{
@Color=16755200
Mask="*ошибка*"
link(onFalse,16742156:doCompare,[(782,202)(782,188)])
link(onTrue,212028:doWork2,[])
}
Add(WinEnum,2507599,672,196)
{
@Color=16755200
link(onFindWindow,5234971:doCompare,[])
}
Add(StrMask,16742156,791,182)
{
@Color=16755200
Mask="*error*"
link(onFalse,14823293:doCompare,[(845,188)(845,97)])
link(onTrue,212028:doWork1,[(837,195)])
}
Add(WinTools,12222132,1043,182)
{
@Color=16755200
link(Handle,13254705:Var3,[(1049,138)])
}
Add(Timer,12795453,623,196)
{
Enable=1
link(onTimer,2507599:doEnum,[])
}
Add(HubEx,212028,833,203)
{
link(onEvent,6849193:doWork3,[(921,209)])
}
Add(FormatStr,3255521,1001,315)
{
DataCount=3
Mask="Скан ошибок: [%1] %2 %3"
Point(FString)
link(onFString,13852468:doEvent1,[])
link(Str1,3418927:FormatTime,[])
link(Str2,14049313:Value,[(1014,209)(965,209)])
}
Add(Time,3418927,1001,266)
{
Format="D:M:Y - h:m:s"
}
Add(Hub,1508952,1001,203)
{
link(onEvent1,12222132:doClose,[])
link(onEvent2,3255521:doString,[(1028,216)(1028,244)(989,244)(989,321)])
}
Add(StrList,2684800,1239,322)
{
FileName="Error.txt"
link(Str,3255521:FString,[(1245,310)(1126,310)(1126,359)(1007,359)])
}
Add(Hub,6221616,1190,322)
{
OutCount=4
link(onEvent1,2684800:doClear,[(1222,328)(1222,335)])
link(onEvent2,2684800:doLoad,[(1222,335)(1222,356)])
link(onEvent3,2684800:doAdd,[(1222,342)(1222,328)])
link(onEvent4,2684800:doSave,[(1222,349)(1222,363)])
}
Add(Hub,13852468,1050,315)
{
link(onEvent2,6221616:doEvent1,[])
}
Add(WinInfo,4483508,1015,70)
{
Point(ProcessID)
link(onWinInfo,7399205:doFindID,[])
link(Handle,13254705:Var1,[(1021,51)(916,51)])
}
Add(StrMask,14823293,868,91)
{
@Color=16755200
Mask="*.exe*"
link(onTrue,6849193:doWork2,[])
}
Add(GetDataEx,13254705,910,133)
{
Angle=3
link(Data,2507599:Handle,[(861,138)(861,240)(678,240)])
}
Add(EnumProcess,7399205,1064,63)
{
Point(onFind)
Point(FullPath)
link(ID,4483508:ProcessID,[(1070,51)(1052,51)(1052,114)(1035,114)])
link(onFind,7721851:doCompare,[])
}
Add(StrMask,7721851,1127,70)
{
Mask="*C:*Project*"
link(onFalse,10271746:doCompare,[])
link(onTrue,6123840:doWork1,[(1187,83)])
link(Str,7399205:FullPath,[(1133,58)(1105,58)(1105,107)(1077,107)])
}
Add(HubEx,6849193,917,98)
{
Angle=3
link(onEvent,14049313:doValue,[(921,76)])
}
Add(Memory,14049313,959,70)
{
link(onData,4483508:doWinInfo,[])
}
Add(StrMask,10271746,1211,70)
{
Mask="*WerFault*"
link(onTrue,6123840:doWork3,[(1255,83)(1255,125)])
}
Add(HubEx,6123840,1183,119)
{
Angle=1
link(onEvent,1508952:doEvent1,[(1187,166)(989,166)(989,209)])
}

Редактировалось 4 раз(а), последний 2018-10-12 00:10:12
карма: 2

0
Ответов: 704
Рейтинг: 7
#3: 2018-10-12 11:08:56 ЛС | профиль | цитата
Rysik, очень благодарен за такое тонкое и удобное решение!
карма: 0

0
Главный модератор
Ответов: 2997
Рейтинг: 395
#4: 2018-10-12 15:16:56 ЛС | профиль | цитата
WatchDog процесса в памяти машины и перезапуск в случае выгрузки из неё.
Синтаксис:
monitorprocess.vbs ProcessName Source Priority(0-31) [WindowStyle(0-11)]
Пример запуска отслеживания приложения:
monitorprocess.vbs "process name" "c:\program files\application.exe" 8 1

Редактировалось 1 раз(а), последний 2018-10-12 15:17:20
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
файлы: 1MonitorProcess.vbs.zip [2.9KB] [364]
Ответов: 1342
Рейтинг: 31
#5: 2018-10-16 21:15:37 ЛС | профиль | цитата
есть ещё некоторые более тонкие методы проверки, они будут работать более точно

ставим на отслеживаемую программу MailSlot сервер, а на ту программу которая будет следить, ставим клиент, и ставим опрос на таймер, отправку любых данных на сервер, и в случае успеха отправки, программа выдаст 1, если программа выдала 0, значит она выдала ошибку, либо зависла, либо вырубилась, убиваем на всякий случай программу по PID или ProcName и запускаем заного....

если же в ходе работы программы нагружается память, то можно сделать опрос выделенной памяти на определённый процесс, если превышает, то убиваем, запускаем заного

если в ходе работы программы она начинает работать с ошибками, то самый действенный метод сделать опрос основной части программы, тоесть опрашивать те узлы, которые совершают основную работу(например через тот же MailSlot делать опрос COM порта какого нибудь параметра железа), если вылезли отклонения или ошибки, или же таймаут истёк, перазапускаем

Редактировалось 2 раз(а), последний 2018-10-16 21:17:37
карма: 2

0
5
Сообщение
...
Прикрепленные файлы
(файлы не залиты)