我正在从另一个控制台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。
谢谢, 斯拉吉
答案 0 :(得分:0)
您可以等待该过程完成+超时。如果进程未在超时内完成,则可以将其终止:
if(!proc.WaitForExit(timeout))
{
proc.Kill();
}
另一种选择是通过IPC与流程进行沟通(例如named pipes)。但这需要扩展这两种工具并增加复杂性。
第三种选择是通过文件进行通信。例如:拥有一个可以由' MyTool.exe编写的状态文件。格式类似于" [process_ID] status"。然后包装器可以定期读取该信息并终止进程,重新启动它或任何需要的东西。