提示用户从通过 Process.start() 启动的应用程序输入

问题描述

我目前正在创建一个控制台应用程序来与 git 交互。这适用于将我的命令的输出重定向到控制台应用程序,但现在一些命令提示输入 Passphrasey/n for owerwrite。如何重定向这些提示并要求用户输入。

var process = new Process();
                process.StartInfo.CreateNowindow = false;
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.RedirectStandardInput = true;
                process.StartInfo.RedirectStandardOutput = true;
                process.StartInfo.RedirectStandardError = true;
                process.StartInfo.WorkingDirectory = workdir;
                process.StartInfo.FileName = appName;
                process.StartInfo.Arguments = argument;
                process.Start();
                var output = new List<string>();
                
                while (process.StandardOutput.Peek() > -1)
                {
                    output.Add(process.StandardOutput.ReadLine());
                }

                while (process.StandardError.Peek() > -1)
                {
                    output.Add(process.StandardError.ReadLine());
                }
                process.WaitForExit();
                foreach (var opt in output)
                {
                    Console.WriteLine(opt);
                }

解决方法

需要异步读取输出和错误;这将使您可以同时从用户那里读取输入,并避免在标准错误缓冲区已满时挂起(您仅在标准输出结束后才读取它,这还不够)。>

流程不询问输入;他们只是读取输入流(当然,当使用标准输入时)。解决此问题的最简单方法是继续读取您这边的标准输入,并将接收到的数据发布到您的“托管”进程的标准输入。