C#启动一个进程,读取错误流会阻塞(因为没错误),怎么停止进程呢?

这是启动代码:

public void StartProcess(string exe, string args, bool wait = false)
        {
            ps.StartInfo.FileName = exe;
            ps.StartInfo.Arguments = args;
            ps.StartInfo.UseShellExecute = false;
            ps.StartInfo.RedirectStandardOutput = true;
            ps.StartInfo.RedirectStandardError = true;
            ps.StartInfo.WorkingDirectory = workingDir;
            ps.StartInfo.CreateNoWindow = true;
            ps.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            ps.Start();

            if (wait) {
                ps.WaitForExit();
            }
        }

这是读取代码:

 StartProcess(exeName, startArgs);
                string err = null;
                if(ps.StandardError.Peek() >= 0)
                {
                    err = ps.StandardError.ReadToEnd();
                }      

我其实是为了看看启动进程有没有出错

阅读 3.8k
1 个回答

自己找到答案了:
Process.Start(info) 返回的是一个 Process 对象,相关文档在这里。

Process 有几个事件,Exited 事件在进程结束后触发。ErrorDataReceived 在有错误输出时触发,OutputDataRecevied 在有正常输出时触发。

还有几个属性,HasExited 检查是否已经结束,ExitCode 获取结束代码,ExitTime 获取结束时间。不过使用后两个属性之前都需要先判断 HasExited,因为如果进程还没结束,获取结束代码和时间都会引发异常。

问题

来自@边城

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进