Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Нужен управляющий скрипт который перезапускает программу. (http://forum.oszone.net/showthread.php?t=142348)

andrewua12 10-06-2009 13:25 1140028

Нужен управляющий скрипт который перезапускает программу.
 
Вложений: 2
Есть программа для получения ключей mpcs, выполняется в досовском окне, постоянно выдает сервисные сообщения.
Необходимо при определенном сообщении, ключевое слово "timeout", перезапустить программу через заданный интервал времени.

amel27 11-06-2009 08:03 1140717

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 1140899

amel27,
спасибо за ответ,
но выдает ошибку просьба довести код до рабочего.
еще раз спасибо

line: 18
char: 9
error: Неверный дескриптор
code: 80070006
suorse: (null)

amel27,
Да еще, при запуске скрипта появляется окно, но в нем нет никакого движения, то есть заданная прога вроде выполняется, судя по заголовку окна, но сообщений не выдает.
Если строку 18 убрать, то просто появляется окно с заголовком и все.

andrewua12 11-06-2009 13:25 1140927

mpcs-0.8k-rc13o-i386-pc-cygwin.exe приложу в ахиве может надо для теста только называеться mpcs_client.exe

http://rapidshare.com/files/24329323...client.7z.html

andrewua12 11-06-2009 14:25 1140975

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 меняются

amel27 11-06-2009 15:33 1141025

andrewua12, извиняюсь... пример запуска для CMD-утилит:
Код:

cscript script.vbs
З.Ы. если тестировать только завтра (GMT+10)

andrewua12 11-06-2009 22:54 1141306

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 попробуй пожалуйста с прогой в архиве, только там не удасться соедениться с раздаюшим ключи,
но можно попробовать другое ключевое слово из того сообщения что выдает прога.

amel27 12-06-2009 09:44 1141482

Цитата:

Цитата andrewua12
попробуй пожалуйста с прогой в архиве »

гм... закрученная прога - она при запуске создает еще несколько своих процессов, поэтому 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 1141581

amel27,
Спасибо вроде работает, буду тестировать

proxy 04-07-2009 17:27 1158964

Цитата:

Цитата amel27
З.Ы. если тестировать только завтра (GMT+10) »

:o

andrewua12 06-07-2009 19:25 1160421

proxy,
Решение в сообщении #8
http://forum.oszone.net/post-1141482-8.html


Время: 23:57.

Время: 23:57.
© OSzone.net 2001-