有很多例子描述了在c#中运行批处理文件时如何捕获标准和错误输出。 我遵循这些指令,虽然它捕获了输出的MOST,但它并没有捕获所有指令。 我无法找到任何解释或帮助处理这个问题。
例如,我必须通过批处理文件运行命令才能从Tableau生成PDF。正确捕获所有结果输出,包括确认登录服务器,确认将生成哪些PDF等。但是,当发生错误时,不会捕获错误。但是,如果我手动运行批处理文件(即不通过代码),我可以在控制台中看到错误消息。 请参阅下面的截图....您可以看到命令行调用和服务器响应。但是最重要的信息是,通过代码运行时不会捕获错误消息(突出显示)。
任何人都可以看到要添加到以下代码片段中的任何内容,以捕获此信息吗?或者它没有被捕获的原因??
System.Diagnostics.ProcessStartInfo procStartInfo = new
System.Diagnostics.ProcessStartInfo(batchFilePath + batchFileName);
procStartInfo.RedirectStandardOutput = true;
procStartInfo.RedirectStandardError = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
Process p = new Process();
p.EnableRaisingEvents = true;
p.StartInfo = procStartInfo;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
StringBuilder sb = new StringBuilder();
p.OutputDataReceived += (sender, args) => sb.AppendLine(args.Data);
p.ErrorDataReceived += (sender, args) => sb.AppendLine(args.Data); ;
p.Exited += Exited;
p.Start();
p.BeginOutputReadLine();
感谢您的任何帮助! 感谢
答案 0 :(得分:2)
可能遗漏:
p.BeginErrorReadLine();
请注意sb.AppendLine(args.Data);不是线程安全的,考虑同步访问