14 / 14 / 0
Регистрация: 16.02.2012
Сообщений: 59
|
|
1 | |
Прием и отправка данных в стороннее консольное приложение19.05.2012, 03:18. Показов 7515. Ответов 14
Метки нет (Все метки)
Всем доброго времени суток.
Не нашёл раздела для с#, решил создать здесь. Проблема следующая есть консольное приложение, которое порождает другое консольное приложение. Вопрос: как получить то что выводят оба этих приложения и вводить в них данные.
0
|
19.05.2012, 03:18 | |
Ответы с готовыми решениями:
14
Отправка данных в стороннее приложение Отправка текста в стороннее приложение Ввод данных в стороннее приложение не с клавиатуры Отправка POST / GET запросов через консольное приложение. [ Delphi 7 ] |
Каратель
|
|
19.05.2012, 03:27 | 2 |
1
|
14 / 14 / 0
Регистрация: 16.02.2012
Сообщений: 59
|
|
19.05.2012, 09:36 [ТС] | 3 |
Спасибо конечно, но я никак не могу понять как данная ссылка на каналы поможет решить мою проблему.
Мне нужно сделать приложение которое бы читало\записывало данные с консоли другого(левого) приложения, при чём так чтобы ещё и получать данные с консоли дочернего приложения для этой левой проги. Извините за косноязычие. Добавлено через 4 часа 50 минут Разобрался с каналами, спасибо. Проблема теперь в следующем, использовал для теста эмулирование cmd, всё отлично, полная эмуляция, но инфу от telnet не выдаёт(хотя ping показывает отлично). Написал прогу для теста, просто выводящую в консоль строки с помощью printf, но мой эмулятор получает эти строки только после завершения тестовой проги. Почему от некоторых программ нормально получаю выходящие данные, а от некоторых либо вообще не получаю(как telnet) либо только после завершения работы. С чем это связано? Можно как-то обойти? Пробовал реализовать и с помощью каналов и с помощью process.StartInfo эффект одинаков ((((
0
|
14 / 14 / 0
Регистрация: 16.02.2012
Сообщений: 59
|
|
20.05.2012, 16:08 [ТС] | 4 |
Ну же, дайте хоть какую-нибудь идею)
0
|
14 / 14 / 0
Регистрация: 16.02.2012
Сообщений: 59
|
|
25.05.2012, 19:51 [ТС] | 5 |
Народ, дайте хотя бы направление куда копать. Срочно надо
0
|
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,245
|
|
25.05.2012, 20:22 | 6 |
может не в тему, но у Фленова в "Библии c#" был раздел Удалённое взаимодействие. Книжку скачай - может то что надо
0
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
|
25.05.2012, 21:48 | 7 |
У меня это так работает:
Одно приложение запускает другое (консольное) как процесс (Process.Start(). У процесса есть события вывода этим приложением данных (строк) в StdOut и StdErr. А так же метод для передачи строчек ему в StdIn. У процесса перед его запуском нужно подписаться на эти события, поставить свойство, отвечающее за его видимость в false. Собираешь ввод пользователя со своей консоли, отправляешь что хочешь в консоль запущенного тобой процесса другого приложения, получаешь события его вывода на консоль, можешь вывести это на свою консоль. Где-то так.
0
|
14 / 14 / 0
Регистрация: 16.02.2012
Сообщений: 59
|
|
26.05.2012, 02:26 [ТС] | 8 |
Делал так же. Но не со всеми приложениями работает.
Для примера сделал консольное приложение, выводящее через printf строку Hello 5 раз с паузой в 1сек. Запуская его в своём приложении, способом который ты описал, получается следующее: пауза в 5сек затем вывод сразу всех строк Hello. Т.е. он получает данные из выходного потока только после завершения процесса. Пробовал перенаправлять выходящий поток в файл через командную строку(test.exe > file.txt), получалось так же, данные выводились только после завершения приложения. С другими же приложениями всё работает как надо, напрмер пинг или cmd. Почему так, в чём причина? ЗЫ: телнет почему-то вообще не перехватывается.
0
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
||||||
26.05.2012, 07:01 | 9 | |||||
А если так?
0
|
14 / 14 / 0
Регистрация: 16.02.2012
Сообщений: 59
|
|
26.05.2012, 12:44 [ТС] | 10 |
Так всё работает. Даже без строки Console.Out.Flush();
Но проблема не в этом. Мне нужно чтобы моё приложение могло работать с ЛЮБЫМ другим консольным приложением.
0
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
|
26.05.2012, 15:13 | 11 |
Твоё консольное приложение не сможет контролировать тормоза внутри любого другого консольного приложения.
1
|
14 / 14 / 0
Регистрация: 16.02.2012
Сообщений: 59
|
|
26.05.2012, 15:34 [ТС] | 12 |
а можно ли динамически закрывать\открывать выходной поток чужого консольного приложения?
0
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
|
26.05.2012, 18:18 | 13 |
Про это не знаю. Попробуй. По идее можно поменять признак видимости окна запущенного приложения после его запуску. Однако, есть вероятность, что этот признак используется только во время запуска. Если что получится - расскажи тут.
Только одна вещь: Если сам запустил чужое приложение, и захватил его вывод, то надо вычитывать его консоль. Если вывод приложения переполнится, то у него случится исключение.
0
|
14 / 14 / 0
Регистрация: 16.02.2012
Сообщений: 59
|
|
01.06.2012, 14:02 [ТС] | 14 |
наконец-то нашёл инфу по структуре работы консольного приложения. Возможно для многих это не новость, но всё же http://blog.not-a-kernel-guy.com/2010/01/10/753
1
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
|
02.06.2012, 14:46 | 15 |
Про траблы с раскладкой не знал, спасибо за ссылку!
0
|
02.06.2012, 14:46 | |
02.06.2012, 14:46 | |
Помогаю со студенческими работами здесь
15
Отправка и приём данных Отправка и приём данных на AJAX Отправка и прием структуры данных Прием и отправка данных на COM-порт Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |