Показать полную графическую версию : [решено] Нужен управляющий скрипт который перезапускает программу.
andrewua12
10-06-2009, 13:25
Есть программа для получения ключей mpcs, выполняется в досовском окне, постоянно выдает сервисные сообщения.
Необходимо при определенном сообщении, ключевое слово "timeout", перезапустить программу через заданный интервал времени.
andrewua12, где-то так:
Set objShell = WScript.CreateObject("WScript.Shell")
StrCommand = "mpcs-0.8k-rc13o-i386-pc-cygwin.exe"
StrFindTxt = "timeout"
IntSeconds = 5
While vbTrue
Set objExecObject = objShell.Exec(StrCommand)
Do While Not objExecObject.StdOut.AtEndOfStream
strText = objExecObject.StdOut.ReadLine()
If Instr(strText, StrFindTxt) > 0 Then
objExecObject.Terminate()
WScript.Sleep IntSeconds * 1000
Exit Do
End If
Wscript.StdOut.WriteLine strText
Loop
Wend
З.Ы. "Terminate" не лучший способ закрытия, может программа поддерживает "горячие клавиши" выхода?
andrewua12
11-06-2009, 13:02
amel27,
спасибо за ответ,
но выдает ошибку просьба довести код до рабочего.
еще раз спасибо
line: 18
char: 9
error: Неверный дескриптор
code: 80070006
suorse: (null)
amel27,
Да еще, при запуске скрипта появляется окно, но в нем нет никакого движения, то есть заданная прога вроде выполняется, судя по заголовку окна, но сообщений не выдает.
Если строку 18 убрать, то просто появляется окно с заголовком и все.
andrewua12
11-06-2009, 13:25
mpcs-0.8k-rc13o-i386-pc-cygwin.exe приложу в ахиве может надо для теста только называеться mpcs_client.exe
http://rapidshare.com/files/243293230/mpcs_client.7z.html
andrewua12
11-06-2009, 14:25
amel27,
если при запущеном mpcs_client запустить скрипт то появляются и исчезают на экране окна с текстом:
87 [main] mpcs_client 5064 _cygtls::handle_exceptions: Exception: STATUS_AC
CESS_VIOLATION
399 [main] mpcs_client 5064 open_stackdumpfile: Dumping stack trace to mpcs_
client.exe.stackdump
числа 87 и 399 меняются
andrewua12, извиняюсь... пример запуска для CMD-утилит:
cscript script.vbs
З.Ы. если тестировать только завтра (GMT+10)
andrewua12
11-06-2009, 22:54
amel27,
cscript script.vbs так запускается и работает, но только появляется ключевое слово выдает следующее:
'нормальная работа------
2009/06/11 18:54:10.390 2368 c01 tuner (0500&023700/277A/45:DF1D): found (453
ms) by ntv
'наступило событие--------
0 [main] mpcs-0.8k-rc13o-i386-pc-cygwin 968 _cygtls::handle_exceptions: Ex
ception: STATUS_ACCESS_VIOLATION
496 [main] mpcs-0.8k-rc13o-i386-pc-cygwin 968 open_stackdumpfile: Dumping st
ack trace to mpcs-0.8k-rc13o-i386-pc-cygwin.exe.stackdump
919357 [main] mpcs-0.8k-rc13o-i386-pc-cygwin 968 _cygtls::handle_exceptions: Ex
ception: STATUS_ACCESS_VIOLATION
939611 [main] mpcs-0.8k-rc13o-i386-pc-cygwin 968 _cygtls::handle_exceptions: Er
ror while dumping state (probably corrupted stack)
242 [main] mpcs-0.8k-rc13o-i386-pc-cygwin 2920 open_stackdumpfile: Dumping s
tack trace to mpcs-0.8k-rc13o-i386-pc-cygwin.exe.stackdump
и так пока не остановиш.
amel27 попробуй пожалуйста с прогой в архиве, только там не удасться соедениться с раздаюшим ключи,
но можно попробовать другое ключевое слово из того сообщения что выдает прога.
попробуй пожалуйста с прогой в архиве »
гм... закрученная прога - она при запуске создает еще несколько своих процессов, поэтому Terminate() не прокатывает - закрывается только один, все остальные "подвисают". Своих клавиш выхода по ходу нет, остается только симуляция нажатий... Попробуй еще вариант, на этот раз скрипт запускается напрямую (без CScript):
Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject")
Set objShell = Wscript.CreateObject("Wscript.Shell")
StrCommand = "mpcs_client.exe"
StrFindTxt = "timeout"
IntSeconds = 5
strTempFile = objFSO.GetTempName
While vbTrue
objShell.Run "CMD /C TITLE " & StrCommand & " & " & StrCommand & " >" & strTempFile, 1, vbFalse
WScript.Sleep(500)
Set objTextFile = objFSO.OpenTextFile(strTempFile, 1)
Do While vbTrue
If objTextFile.AtEndOfStream Then
WScript.Sleep(500)
Else
strText = objTextFile.ReadLine
If InStr(strText, StrFindTxt) > 0 Then
WScript.Sleep(500)
ObjShell.AppActivate(StrCommand)
ObjShell.SendKeys("^C")
WScript.Sleep IntSeconds*1000
Exit Do
End If
End If
Loop
objTextFile.Close
WScript.Sleep(100)
Wend
З.Ы. с "черным окном" придется смириться - оно принимает Ctrl+C зывершения
andrewua12
12-06-2009, 12:35
amel27,
Спасибо вроде работает, буду тестировать
З.Ы. если тестировать только завтра (GMT+10) »
:o
andrewua12
06-07-2009, 19:25
proxy,
Решение в сообщении #8
http://forum.oszone.net/post-1141482-8.html
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.