Вызов процесса C #, взаимодействие со стандартным вводом и стандартным выводом
У меня есть кнопка, которую я нажимаю, которая выполняет команду. Команда может запросить какой-то стандартный ввод, и мне нужно ответить на этот ввод, проблема в том, как программа запускается изо дня в день, поэтому мне нужно интерпретировать стандартный вывод и соответственно перенаправить стандартный ввод.
У меня есть этот простой кусок кода, который читает строку стандартного вывода построчно, и когда он видит запрос пароля, он отправляет стандартный ввод, однако программа просто зависает, так как никогда не видит запрос пароля, но когда я запускаю В командном файле есть запрос пароля.
Вот командный файл, который я вызываю для выполнения этого теста:
@echo off
echo This is a test of a prompt
echo At the prompt, Enter a response
set /P p1=Enter the Password:
echo you entered "%p1%"
Вот вывод этого командного файла при запуске из командной строки:
C:\Projects\SPP\MOSSTester\SPPTester\bin\Debug>test4.bat
This is a test of a prompt
At the prompt, Enter a response
Enter the Password: Test1
you entered "Test1"
Вот фрагмент кода C #, который я использую для вызова зависшего пакетного файла:
var proc = new Process();
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = "/c test4.bat";
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
//read the standard output and look for prompt for password
StreamReader sr = proc.StandardOutput;
while (!sr.EndOfStream)
{
string line = sr.ReadLine();
Debug.WriteLine(line);
if (line.Contains("Password"))
{
Debug.WriteLine("Password Prompt Found, Entering Password");
proc.StandardInput.WriteLine("thepassword");
}
}
sr.Close();
proc.WaitForExit();
Вот стандартный вывод отладки, который я вижу, обратите внимание, что я никогда не вижу подсказку для пароля, почему это? это просто висит?
This is a test of a prompt
At the prompt, Enter a response
Есть ли способ, которым я могу посмотреть стандартный вывод для запроса и реагировать на него соответственно?