Chamada de Processo C #, Interaja com Entrada Padrão e Saída Padrão
Eu tenho um botão clico que executa um comando. O comando pode solicitar alguma entrada padrão e eu preciso responder a essa entrada, o problema é a forma como o programa é executado pode ser diferente do dia a dia, então eu preciso interpretar a saída padrão e redirecionar a entrada padrão de acordo.
Eu tenho este pedaço simples de código que lê a saída padrão linha por linha e quando ele vê um prompt para senha, ele enviará entrada padrão, porém o programa simplesmente trava porque ele nunca vê o prompt da senha, mas quando eu corro o arquivo em lote, o prompt de senha está lá.
Aqui está o arquivo em lote que estou chamando para executar este teste:
@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%"
Aqui está a saída desse arquivo em lote quando executado a partir da linha de comando:
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"
Aqui está o snippet C # que estou usando para chamar o arquivo em lotes que está sendo interrompido:
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();
Aqui está a saída padrão de depuração que vejo, observe que nunca vejo o prompt da senha, por que isso acontece? apenas trava?
This is a test of a prompt
At the prompt, Enter a response
Existe uma maneira que eu possa assistir a saída padrão para solicitar e reagir a ela de acordo?