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?

questionAnswers(2)

yourAnswerToTheQuestion