Вверх ↑
Этот топик читают: Гость
Ответов: 817
Рейтинг: 52
#1: 2009-05-07 12:51:35 ЛС | профиль | цитата
Приятного времени суток господа!

Через компонент WinExec можно выполнять консольные комманды
для этого мы сначала открываем консоль точкой doConsoleExec
а потом передаем ей строку doConsoleInput и заданная комманда отрабатывается
Все хорошо, но после отработки этой комманды cmd продолжает висеть в памяти
Как можно дождаться исполнения коммады а потом закрыть cmd ?
Заранее спасибо
карма: 1

0
Разработчик
Ответов: 4698
Рейтинг: 426
#2: 2009-05-07 12:54:01 ЛС | профиль | цитата
А так?
Add(WinExec,2704858,280,119)
{
Point(doConsoleTerminate)
}
карма: 10
0
Ответов: 817
Рейтинг: 52
#3: 2009-05-07 13:03:01 ЛС | профиль | цитата
Assasin,
я ее смогу завершить принудительно только после того как код отработает
а как понять что он отработал? это может произойки через 5 сек, а может и через 5 мин
Пытаюсь понять свой вопрос так
code_13168.txt
пока безрезультата
карма: 1

0
файлы: 1code_13168.txt [1.1KB] [172]
Ответов: 4641
Рейтинг: 334
#4: 2009-05-07 13:05:29 ЛС | профиль | цитата
если программа ждет дальнейших действий, то только:
1. по таймауту закрывать
2. выводить рузультат выполнения команды в мемо и на основании результата закрывать
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 4698
Рейтинг: 426
#5: 2009-05-07 13:07:12 ЛС | профиль | цитата
--молчу, упустил название cmd--
------------ Дoбавленo в 13.07:
--опередили--
карма: 10
0
Ответов: 817
Рейтинг: 52
#6: 2009-05-07 13:08:34 ЛС | профиль | цитата
Ravilr,
1. ну вот в моем примере комманда ping завершилась и ничего больше не ждет.
как быть?
2. резутат не однозначный
отследить можно, то только перебором 1500 возможных строк
так не пойдет, может есть более универсальные варианты
карма: 1

0
Ответов: 4641
Рейтинг: 334
#7: 2009-05-07 13:11:17 ЛС | профиль | цитата
а изменения кол-ва строк в минуту например однозначно?
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 817
Рейтинг: 52
#8: 2009-05-07 13:13:41 ЛС | профиль | цитата
Ravilr писал(а):
а изменения кол-ва строк в минуту например однозначно?

не понял ваш вопрос
можно его перефразировать?
карма: 1

0
Разработчик
Ответов: 4698
Рейтинг: 426
#9: 2009-05-07 13:14:37 ЛС | профиль | цитата
А можно сделать проверку выдачи результата(как предложил Ravilr, если я не ошибся):
code_13169.txt
карма: 10
0
файлы: 1code_13169.txt [401B] [115]
Ответов: 817
Рейтинг: 52
#10: 2009-05-07 13:19:48 ЛС | профиль | цитата
Assasin писал(а):
А можно сделать проверку выдачи результата(как предложил Ravilr, если я не ошибся):
code_13169.txt

это понятно, что так можно, но...
Результатом является несколько сторок их может быть 5, а может 50
время вывода каждой строки заранее неизвестно, тот же пинг я могу пустить на 10 мин.
В вашем примере может случиться так, что у меня комманда выполняется на середине процесса
а таймаут вышел (у вас 5 сек.) и надо закрываться, как следствие некорректная работа (это в лучшем случае)

карма: 1

0
Ответов: 4641
Рейтинг: 334
#11: 2009-05-07 13:19:53 ЛС | профиль | цитата
-= DriveR =- писал(а):
не понял ваш вопрос
можно его перефразировать?

Если не знаешь когда закончится, но например консольная программа выводит какойто результат в мемо, То по окочанию вывода результата количество строк в мемо не изменяется. А это значит что все закончилось.

И кстати какой процес то висит ? У меня как пинг отработает то ping.exe закрывается.
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 817
Рейтинг: 52
#12: 2009-05-07 13:22:52 ЛС | профиль | цитата
Ravilr писал(а):
И кстати какой процес то висит ? У меня как пинг отработает то ping.exe закрывается

висит cmd.exe
его надо закрывать
Насчет кол-ва строк это мысль, но тогда надо ща выдумывать как следить за этими строками... и какое время следить...
а если этого времени не хватит...
НЕ, так тоже не хочется. Поуниверсальней бы что то.
Ладно, пойду перекушу, на сытый желудок лучше думается
карма: 1

0
Ответов: 4641
Рейтинг: 334
#13: 2009-05-07 13:34:19 ЛС | профиль | цитата
не знаю какая у тебя задача, если такая как пинг то например
code_13171.txt
------------ Дoбавленo в 13.35:
pping.cmd

ping %1
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 1code_13171.txt [1KB] [131]
Ответов: 4631
Рейтинг: 749
#14: 2009-05-07 16:08:11 ЛС | профиль | цитата
Заранее извиняюсь, если я что-то не так понял или пропустил (примеры не смотрел).
-= DriveR =- писал(а):
висит cmd.exe

Можно запускать, например, не ping.exe, а cmd.exe с параметрами. Среди этих параметров есть параметр, указывающий cmd.exe закрываться или нет после отработки всех команд. Все параметры запуска cmd.exe можно узнать по "cmd.exe /?"

карма: 26

0
Ответов: 2125
Рейтинг: 159
#15: 2009-05-07 18:18:53 ЛС | профиль | цитата
-= DriveR =- писал(а):
Как можно дождаться исполнения коммады а потом закрыть cmd ?

Передай команду exit, т.к. неважно, что она будет передана раньше, чем надо. Выполнится она всё равно вовремя.

Add(MainForm,2953706,21,105)
{
Width=395
}
Add(WinExec,12510948,273,161)
{
FileName="cmd.exe"
Point(doConsoleExec)
Point(doConsoleInput)
Point(onConsoleResult)
link(onConsoleResult,13046043:doAdd,[])
}
Add(Button,7284687,126,175)
{
Left=20
Top=10
link(onClick,16068274:doEvent1,[])
}
Add(Hub,16068274,175,175)
{
link(onEvent1,12510948:doConsoleExec,[])
link(onEvent2,6395958:doData,[(199,188)(199,202)])
}
Add(DoData,6395958,210,196)
{
Data=String(dir
exit
)
link(onEventData,12510948:doConsoleInput,[(258,202)(258,188)])
}
Add(RichEdit,13046043,322,168)
{
Left=10
Top=45
Width=365
Height=210
ScrollBars=3
}
карма: 1

1
Голосовали:Konst
Сообщение
...
Прикрепленные файлы
(файлы не залиты)