Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/41: Рейтинг темы: голосов - 41, средняя оценка - 4.85
14 / 14 / 0
Регистрация: 16.02.2012
Сообщений: 59
1

Прием и отправка данных в стороннее консольное приложение

19.05.2012, 03:18. Показов 7515. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток.
Не нашёл раздела для с#, решил создать здесь.
Проблема следующая есть консольное приложение, которое порождает другое консольное приложение.
Вопрос: как получить то что выводят оба этих приложения и вводить в них данные.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2012, 03:18
Ответы с готовыми решениями:

Отправка данных в стороннее приложение
Доброго времени суток! Хотелось бы узнать, как сделать так чтобы например в текстбокс было введено...

Отправка текста в стороннее приложение
Я знаю возможно эту тему уже обсуждали много раз,но я всё равно не могу ничего понять, если можно...

Ввод данных в стороннее приложение не с клавиатуры
у меня есть готовая *.exe, в которой осуществляется запись и чтение (вид...

Отправка POST / GET запросов через консольное приложение. [ Delphi 7 ]
Добрый день. Требуется отправлять POST / GET запросы из под консольного Delphi приложения, и...

14
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.05.2012, 03:27 2
http://msdn.microsoft.com/en-u... pipes.aspx
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
А если так?
C#
1
2
Console.WriteLine("Hello");
Console.Out.Flush();
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2012, 14:46
Помогаю со студенческими работами здесь

Отправка и приём данных
Tcp сокеты. У меня есть два массива байтов. Допустим я отправил один массив, а потом ещё один....

Отправка и приём данных на AJAX
Обьясните как работать с AJAX В простых примерах. Например Как отправить формой сообщение без...

Отправка и прием структуры данных
Как можно организовать передачу структуры, допустим User.ID,User.Phone,User.OtherParapmetrs на...

Прием и отправка данных на COM-порт
Всем доброго времени суток. Пишу программу для принятия данных по ком-порту. В принципе машина...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru