C# 如何确定流程是否需要输入?

C# 如何确定流程是否需要输入?,c#,process,system.diagnostics,redirectstandardoutput,C#,Process,System.diagnostics,Redirectstandardoutput,我正在使用.NET Framework中的System.Diagnostics.Process类运行命令提示符实用程序。在某些情况下,此命令提示实用程序可能需要一些用户输入,有时它完成任务时也不需要用户的任何输入。 以下是我为运行此流程所做的工作: var process = new Process(); process.StartInfo = new ProcessStartInfo([PATH_TO_EXE], arguments); process.StartInf

我正在使用.NET Framework中的System.Diagnostics.Process类运行命令提示符实用程序。在某些情况下,此命令提示实用程序可能需要一些用户输入,有时它完成任务时也不需要用户的任何输入。 以下是我为运行此流程所做的工作:

    var process = new Process();
    process.StartInfo = new ProcessStartInfo([PATH_TO_EXE], arguments);
    process.StartInfo.RedirectStandardError = true;
    process.StartInfo.RedirectStandardInput = true;
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.UseShellExecute = false;
    process.Start();

问题是我不知道如何确定这个过程是否需要输入?

我发现唯一有效的方法。不管反应是短是长。在您发送这样的命令后添加回显也太麻烦了。而不仅仅是检查回声以知道何时停止等待

var进程=新进程();
process.StartInfo.UseShellExecute=false;
process.StartInfo.CreateNoWindow=true;
process.StartInfo.RedirectStandardOutput=true;
process.StartInfo.RedirectStandardError=true;
process.StartInfo.FileName=Settings.MongoPath;
//重定向标准输入,以便将命令发送到shell。
process.StartInfo.RedirectStandardInput=true;
process.StartInfo.Arguments=ConnString;
process.Start();
//这是键,一旦参数中的上一个命令执行完毕,返回1
process.StandardInput.WriteLine({ping:1}”);
var current_line=string.Empty;
var OutputList=新列表();
而(!process.StandardOutput.EndOfStream)
{
当前行=进程.StandardOutput.ReadLine();
如果(当前_线==“1”)
{
//命令执行完毕
打破
}
OutputList.Add(当前_行);
}
//包含命令的所有输出
输出列表

无法知道进程是否随时都在等待输入。如果您知道特定进程如何提示用户输入,您可以阅读标准输出并对其进行分析。@NilsO:谢谢您的评论。我也试着照你说的做。当我尝试读取StandardOutput时,线程冻结,程序挂起。似乎我无法读取输出,而进程正在等待输入。知道吗?调用
process.waitForInputdle()时会发生什么在尝试写入StandardInput之前?WaitForInput失败。这可能是因为该进程没有图形界面。@Themerdad这最终对我有效。立即发送带有消息的echo命令。只要检查一下回音信息。当它弹出时,它就完成了。