Llamada de proceso C #, interactuar con entrada estándar y salida estándar

Tengo un botón en el que hago clic que ejecuta un comando. El comando puede solicitar alguna entrada estándar y debo responder a esa entrada, el problema es que la forma en que se ejecuta el programa puede ser diferente de un día a otro, por lo que debo interpretar la salida estándar y redirigir la entrada estándar en consecuencia.

Tengo este simple fragmento de código que lee la línea de salida estándar por línea y cuando ve una solicitud de contraseña, enviará una entrada estándar, sin embargo, el programa simplemente se bloquea ya que nunca ve la solicitud de la contraseña, pero cuando ejecuto el archivo por lotes el mensaje de contraseña está allí.

Aquí está el archivo por lotes que estoy llamando para ejecutar esta prueba:

@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%"

Aquí está la salida de ese archivo por lotes cuando se ejecuta desde la línea de comandos:

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"

Aquí está el fragmento de código de C # que estoy usando para llamar al archivo por lotes que está colgado:

    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();

Aquí está la salida estándar de depuración que veo, note que nunca veo el aviso para la contraseña, ¿por qué es esto? solo cuelga?

This is a test of a prompt
At the prompt, Enter a response

¿Hay alguna manera de que pueda ver la salida estándar para avisos y reaccionar a ella en consecuencia?

Respuestas a la pregunta(2)

Su respuesta a la pregunta