Есть два варианта решения:
1. Сложный, но делается число в шаблоне. Берешь в зенке переменную окружения {-Environment.TickCount-}. Если мне не изменяет память, то это системная переменная которая отсчитывает время с момента запуска системы. это время в милисекундах. соответственно алгоритм:
- при старте работы шаба запоминаешь это время
- напихиваешь в шаблон кубики которые в разные моменты времени опять берут эту переменную и сравниваешь текущее время со временем старта. соответственно если оно больше заданного - то завершаешь работу шаба, если меньше, то продолжает работу.
у этого способа есть свои минусы, но решить твою проблему хоть как-то поможет.
2. Делаешь на уровне системы. Как правило если шаб зависает, то чем дольше он висит, тем больше оперативы ему нужно. В общем делаешь батник который грохает процессы, которые едят оперативки больше заданного объема. Добавляешь этот батник в загрузку по расписанию, и винда запускает его хоть каждую минуту (как тебе нужно), и, если находит процесс base.exe, то принудительно его грохает.
Я пользуюсь вот таким скриптом. Занятость оперативы устанавливаешь сам, сейчас стоит 417200000 байт.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery( _
"Select * From Win32_Process " _
& "Where Name = 'base.exe'")
Killed = False
For Each objProcess In colProcesses
If objProcess.WorkingSetSize > 417200000 Then
objProcess.Terminate
Killed = True
End If
Next
If Killed Then
Set objShell = Wscript.CreateObject("Wscript.Shell")
objShell.Run "notepad.exe"
End If
Вот как то так. Для себя я пока нашел только эти способы, если есть что-то еще, буду сам рад узнать