这是启动代码:
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();
}
我其实是为了看看启动进程有没有出错
自己找到答案了:
Process.Start(info) 返回的是一个 Process 对象,相关文档在这里。
Process 有几个事件,Exited 事件在进程结束后触发。ErrorDataReceived 在有错误输出时触发,OutputDataRecevied 在有正常输出时触发。
还有几个属性,HasExited 检查是否已经结束,ExitCode 获取结束代码,ExitTime 获取结束时间。不过使用后两个属性之前都需要先判断 HasExited,因为如果进程还没结束,获取结束代码和时间都会引发异常。
问题
来自@边城