如何在执行其中的另一个控制台时处理.net Process()中的异常

时间:2016-05-31 19:37:46

标签: c# .net batch-file scheduled-tasks console-application

我正在从另一个控制台App执行一个.net控制台。 例如MyTool.exe< input.txt中

其中Input.txt将具有工具所需的所有输入。

输入文件中的输入应该是dyanmic,所以要实现这一点。

我创建了另一个包装器控制台App MyWrapper.exe。 这是首先装箱input.txt文件,然后使用.Net Process()调用MyTool.exe。

批处理文件的内容

MyTool.exe< input.txt中

var proc = new Process();
proc.StartInfo.FileName = "MyBatchFIle.bat";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();

现在问题就在这里。 如果出现错误或输入错误,MyTool.exe可能会进入无限循环。

所以我想检测这种错误并停止执行。

我的计划是从Windows调度程序执行MyWrapper.exe。

谢谢, 斯拉吉

1 个答案:

答案 0 :(得分:0)

您可以等待该过程完成+超时。如果进程未在超时内完成,则可以将其终止:

if(!proc.WaitForExit(timeout))
{ 
    proc.Kill();
}

另一种选择是通过IPC与流程进行沟通(例如named pipes)。但这需要扩展这两种工具并增加复杂性。

第三种选择是通过文件进行通信。例如:拥有一个可以由' MyTool.exe编写的状态文件。格式类似于" [process_ID] status"。然后包装器可以定期读取该信息并终止进程,重新启动它或任何需要的东西。