Запускаю консольную программу через doConsoleExec...
Почему-то не происходит событие onConsoleTerminate после того как консольная программа завершила работу.
Что нужно поправить в коде элементе, что-бы событие всегда происходило при завершении консольной программы?
Этот топик читают: Гость
Ответов: 824
Рейтинг: 138
|
|||
карма: 1 |
|
Google
vip
|
#1.1контекстная реклама от партнеров
|
Ответов: 824
Рейтинг: 138
|
|||
Тишь да гладь. И только мертвые с косами вдоль дорог стоят....
Печально как-то... |
|||
карма: 1 |
|
Ответов: 8885
Рейтинг: 823
|
|||
sashaoli, запустил "Фоновое приложение", у него есть точка onStop и отрабатывает по-любому
sashaoli, какой нетерпеливый вы наш |
|||
карма: 19 |
|
Ответов: 824
Рейтинг: 138
|
|||
Леонид, не то, я запускаю "чужую" программу через WinExec методом doConsoleExec и ожидаю события onConsoleTerminate по завершению "чужой" программы. А оно почему-то не происходит...
Редактировалось 1 раз(а), последний 2016-09-18 19:22:22 |
|||
карма: 1 |
|
Ответов: 8885
Рейтинг: 823
|
|||
sashaoli, а-а, понятно
У меня на onConsoleTerminate событие происходит только при подаче на doConsoleTerminate, правда "Terminate" не происходит Может перед doConsoleTerminate надо параметры заполнять, это к nesco, у него список есть |
|||
карма: 19 |
|
Разработчик
Ответов: 26061
Рейтинг: 2120
|
|||
Леонид писал(а): это к nesco, у него список естьЭтим компонентом вообще-то Netspirit вплотную занимался последнее время, я вообще тут мимо проходил. |
|||
карма: 22 |
|
Ответов: 62
Рейтинг: 1
|
|||
sashaoli, разве только приостановить выполнение своей программы. Не через ConsoleTerminate, конечно, но функцию выполняет, как мне кажется, ту же.
code Add(MainForm,2953706,77,210) { link(onCreate,9696349:doEvent1,[]) } Add(WinExec,3781635,175,210) { FileName="cmd.exe" RunEvent=1 Point(doConsoleExec) Point(ExitCode) } Add(Message,3729512,231,259) { } Add(Hub,9696349,133,224) { link(onEvent1,3781635:doConsoleExec,[]) link(onEvent2,14455067:doData,[(165,237)(165,265)]) } Add(DoData,14455067,175,259) { link(onEventData,3729512:doMessage,[]) link(Data,3781635:ExitCode,[]) } P.S.: там в коде компонента WinExec в функции ConsoleTerminate строчка "Terminate;", что-то явно она должна делать) |
|||
карма: -1 |
|
Ответов: 824
Рейтинг: 138
|
|||
Vaeltaja, ну да, может быть...
а если вот так
|
|||
карма: 1 |
|
Ответов: 62
Рейтинг: 1
|
|||
А зачем получать код завершения без предварительного запуска программы?
|
|||
карма: -1 |
|
Ответов: 824
Рейтинг: 138
|
|||
И я о том-же, какая разница между результатом?
|
|||
карма: 1 |
|
Ответов: 62
Рейтинг: 1
|
|||
А, понял. Если через ConsoleExec запускать, то там нужно давать параметр вроде /c <FILE_NAME>.
Пробую так, и так не выходит ничего. Зато если через Exec пускать, то все в порядке. Конечно, окошечко-то появляется консоли, но, как по мне, не жуткая картина. Скажите, sashaoli, вам нравится консольное окно? Как по мне, впечатляющее Редактировалось 2 раз(а), последний 2016-09-18 23:51:05 |
|||
карма: -1 |
|
Ответов: 4612
Рейтинг: 746
|
|||
Судя по коду компонента, событие onConsoleTerminate происходит только при doConsoleTerminate и при ошибках работы с каналами вывода. Возможно, если программа завершается корректно, такой метод не всегда срабатывает.
nesco писал(а): Этим компонентом вообще-то Netspirit вплотную занимался последнее времяКроме того, пайпы - это такая универсальная штука, по-моему, можно даже читать вывод и подавать команды уже запущенной программе. Можно обмениваться данными между своими программами. А это уже напрашивается парочка компонентов "клиент-сервер" со всеми полезными вещами. Редактировалось 1 раз(а), последний 2016-09-20 10:27:38 |
|||
карма: 26 |
|
Ответов: 824
Рейтинг: 138
|
|||
Тут можно, в процедуре чтения пайпов добавить проверку:
--- Добавлено в 2016-09-19 12:00:05 Ну и по ходу дела: для консольной программы огромное значение имеет "рабочий каталог", к сожалению для запуска консольного приложения - это не учтено. Я, у себя, поправил... Редактировалось 3 раз(а), последний 2016-09-19 12:00:05 |
|||
карма: 1 |
|
Ответов: 824
Рейтинг: 138
|
|||
Проверил код написанный выше:
Работает, onConsoleTerminate происходит четко. Только некоторые программы - бросают инфу в пайп и завершают работу. А у меня получается, что пайпы уже убиты и соответственно вывод на onConsoleResult не происходит... |
|||
карма: 1 |
|
Ответов: 2057
Рейтинг: 28
|
|||
sashaoli писал(а): Тут можно, в процедуре чтения пайпов добавить проверку:Где, что добавить? У меня не работает событие onConsoleTerminate. Дайте рабочий код компонента, пожалуйста. HiAsm b186 Редактировалось 1 раз(а), последний 2019-05-08 22:48:15 |
|||
карма: 1 |
|