如何判断.Net System.Diagnostics.Process成功运行或失败?
-
03-07-2019 - |
题
我正在编写调度程序或排序。它基本上是一个包含exes列表的表(如“C:\ a.exe”)和一个控制台应用程序,它每分钟左右查看表中的记录并运行尚未运行的任务。 / p>
我运行这样的任务:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = someExe; // like "a.exe"
p.Start();
如何判断特定任务是否失败?例如,如果a.exe抛出未处理的异常怎么办?我想让上面的代码知道这种情况何时发生,并用“特定任务失败”等内容更新任务表。等
我该怎么做?
我没有使用Sql Agent或Windows Scheduler,因为其他人告诉我不要。他有更多的“经验”。所以我基本上只是遵循命令。随意提出替代方案。
解决方案
您可以查看 Win32Exception 以查看是否由于文件不存在或执行访问, Process.Start()失败被拒绝。
但是您无法捕获使用此类创建的进程抛出的异常。首先,应用程序可能不是用.NET编写的,因此可能根本没有异常的概念。
您可以做的是检查 ExitCode 应用程序或阅读 StandardOutput 和 StandardError 流以检查是否有错误消息正在发布。
其他提示
我认为你正在寻找Process.ExitCode,假设进程返回一个。 您可能需要使用WaitForExit()。还有一个ErrorDataReceived事件,当应用程序发送到stderr时会触发该事件。
除了ExitCode之外,您还可以执行以下操作:
string output = p.StandardOutput.ReadToEnd();
这将捕获本应写入命令窗口的所有内容。然后,您可以根据应用程序解析该字符串中的已知模式以显示错误。
扩展@jop所说的内容。您还需要等待该过程关闭。因此:
p.Start();
p.WaitForExit();
int returnCode = p.ExitCode;
非零代码通常是错误。一些应用程序使用否定的是错误,而正面的应用程序使用状态代码/警告。
不隶属于 StackOverflow