在c#中运行批处理文件时捕获所有输出

时间:2018-01-22 19:39:30

标签: c# batch-file stdout

有很多例子描述了在c#中运行批处理文件时如何捕获标准和错误输出。 我遵循这些指令,虽然它捕获了输出的MOST,但它并没有捕获所有指令。 我无法找到任何解释或帮助处理这个问题。

例如,我必须通过批处理文件运行命令才能从Tableau生成PDF。正确捕获所有结果输出,包括确认登录服务器,确认将生成哪些PDF等。但是,当发生错误时,不会捕获错误。但是,如果我手动运行批处理文件(即不通过代码),我可以在控制台中看到错误消息。 请参阅下面的截图....您可以看到命令行调用和服务器响应。但是最重​​要的信息是,通过代码运行时不会捕获错误消息(突出显示)。

enter image description here

任何人都可以看到要添加到以下代码片段中的任何内容,以捕获此信息吗?或者它没有被捕获的原因??

        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();

感谢您的任何帮助! 感谢

1 个答案:

答案 0 :(得分:2)

可能遗漏:

p.BeginErrorReadLine();

请注意sb.AppendLine(args.Data);不是线程安全的,考虑同步访问