首页 > 解决方案 > 提示用户输入通过 Process.start() 启动的应用程序

问题描述

我目前正在创建一个控制台应用程序来与 git 交互。这可以很好地将我的命令的输出重定向到控制台应用程序,但现在一些命令会提示输入,例如PassPhraseor y/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);
                }

标签: c#process.startredirectstandardoutput

解决方案


您需要异步读取输出和错误;这既可以让您同时读取用户的输入,又可以避免标准错误的缓冲区已满时挂起(您只是在标准输出结束后才读取它,这还不够)。

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


推荐阅读