2010-08-05 2 views
1

Я написал собственный узел powershell, который предоставляет интерактивную оболочку на основе winforms. Примеры MSDN были превосходными, и я смог получить что-то, работающее в течение нескольких часов.C# Powershell host, захватывающий вывод запущенных консольных приложений

Все стандартные встроенные команды, такие как dir и т. Д. Работают так, как ожидалось. Однако, когда я пытаюсь запустить другое консольное приложение, такое как FTP-клиент, это приложение начинает отправлять вывод в stdout. Я вижу это, изменяя тип приложения в VS от окон до консоли. Как только я запускаю FTP из своей интерактивной оболочки, FTP начинает разговаривать с консольным окном.

Кто-нибудь занимался этим раньше? В C++ я мог просто перенаправить stdin и stdout и сделать с ним, но я не вижу способа сделать это в C#. Помогите!

обновление

Хорошо, все, что я бегу, что не является встроенной командой немедленно начинает взаимодействовать с окном консоли.

ответ

1

Проверьте это, может быть, это может помочь

Process p = new Process(); 
    p.StartInfo.FileName = "netstat"; 
    p.StartInfo.Arguments = "-a"; 
    p.StartInfo.RedirectStandardOutput = true; 
    p.StartInfo.UseShellExecute = false; 
    p.Start(); 
    System.Diagnostics.Debug.WriteLine(p.StandardOutput.ReadToEnd()); 
+1

Спасибо. Это хорошо работает для cmd.exe и других исполняемых файлов, но не для PowerShell. –

+0

Извините, я полностью пропустил часть Powershell –

1

Я наконец-то нашел рабочий пример here! Хотя он не использует классы Powershell в платформе .NET, он делает именно то, что мне нужно, включая успешное захват io из запущенных консольных приложений.

Смежные вопросы