2014-10-14 3 views
0

Я работаю над проектом для переноса приложений SFTP в библиотеки-утилиты для использования во внутренних проектах компании. Наша компания использует Tectia, но мы также изучаем другие библиотеки, такие как WinSCP. Я знаю, что есть другие SFTP-клиенты open-source, но моя компания настаивает на поддержке Tectia. Я знаю, что Tectia поддерживает пакетные файлы с помощью переключателя -B, но мы хотим, чтобы пользователи библиотеки могли использовать SFTP без необходимости изучать синтаксис и просто использовать .NET-методы, поэтому я решил по пути обернуть интерактивный консоль работает sftpg3. Я могу запустить процесс, даже успешно войти в систему, если включить учетные данные в качестве параметров командной строки. Проблема в том, что я не могу взаимодействовать с процессом, используя перенаправленный StandardInput. Код ниже:Проблема с консольным приложением с перенаправлением stdin в Windows

Process sftpproc = new Process(); 
sftpproc.StartInfo.FileName = @"sftpg3"; 
sftpproc.StartInfo.UseShellExecute = false; 
sftpproc.StartInfo.RedirectStandardInput = true; 
sftpproc.StartInfo.RedirectStandardOutput = true; 
sftpproc.StartInfo.RedirectStandardError = true; 
sftpproc.StartInfo.CreateNoWindow = true; 

StringBuilder sb = new StringBuilder(); 

sftpproc.OutputDataReceived += 
    (sender, args) => { sb.AppendFormat("INFO:{0}\n", args.Data); }; 
sftpproc.ErrorDataReceived += 
    (sender, args) => { sb.AppendFormat("WARN:{0}\n", args.Data); }; 
sftpproc.Start(); 
sftpproc.BeginOutputReadLine(); 
sftpproc.BeginErrorReadLine(); 

StreamWriter input = sftpproc.StandardInput; 

input.WriteLine("open [email protected]"); 
input.WriteLine("lcd D:\\"); 
input.WriteLine("get file.txt"); 

string messages = sb.ToString(); 

Код выше отлично работает с WinSCP командной строки, или когда я использую консоль команды непосредственно в консоли. Я попытался перенаправить вывод sftpg3 в текстовый файл, и он может перенаправить его, а затем я попробовал перенаправить перенаправление ввода (sftpg3 <cmd.txt), и он не смог выполнить команды (однако -B работает, но, как уже упоминалось, это не то, что мне нужно). Есть ли способ заставить консольное приложение читать из перенаправленного stdin? Вызов приложения от cmd.exe не помог мне.

+0

Ваш фрагмент кода является большим несоответствием с вашим вопросом. Использование '<' требует запуска cmd.exe. Не показывайте нам рабочую версию, это не поможет нам. –

ответ

1

Если sftpg3 < cmd.txt не работает, приложение не считывает со стандартного ввода.

Независимо от того, где вы перенаправляете его. Вы просто не можете использовать этот подход.

+0

Я боялся этого. Благодарю. –

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