我正在使用Process类来运行exe。
exe是我无法控制的第三方控制台应用程序。
我想知道进程是否在命令行上等待输入。
如果它有任何区别,我打算在应用程序等待输入时终止它。
当程序的输出等待读取时,有适当的事件,但是当进程耐心等待输入时,我看不到任何类似的事件。
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "myapp.exe";
info.CreateNoWindow = true;
info.UseShellExecute = false;
info.RedirectStandardError = true;
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
process.StartInfo = info;
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
process.ErrorDataReceived += new DataReceivedEventHandler(process_ErrorDataReceived);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
如何检测我的进程正在等待输入?
答案 0 :(得分:17)
根据第三方流程的具体操作,您可以尝试轮询其线程的状态:
foreach(ProcessThread thread in process.Threads)
if (thread.ThreadState == ThreadState.Wait
&& thread.WaitReason == ThreadWaitReason.UserRequest)
process.Kill();
失败了......你可以尝试
process.StandardInput.Close();
在调用Start()之后,我猜想如果它试图从标准输入中读取,则会在子进程中引发异常。
答案 1 :(得分:2)
如果控制台应用程序有某种提示等待输入,您可以使用进程的Process.StandardOutput属性定期解析控制台输出文本并等待所述提示。一旦检测到正确的字符串,您就知道它正在等待输入。见http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx。
答案 2 :(得分:0)
使用process.StandardInput.writrLine(“ input”); 用于在c#
中向consol发送输入