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