为什么标准输出在从子进程恢复时会将其解释为错误

时间:2016-06-02 08:15:09

标签: c# process cmd console-application redirectstandardoutput

我有以下方法启动一个进程并将标准输出挂钩到控制台应用程序我正在创建。 _Log.Info(..)_Log.Error(..)正在使用log4.net输出到控制台和滚动文件..

private void RunExternalTool(string toolPath, string workingDirectory, params string[] arguments)
        {
            var toolarguments = arguments != null ? string.Join(" ", arguments) : "";
            _Log.InfoFormat("Starting tool [{0}] with arguments [{1}]...", Path.GetFileName(toolPath), toolarguments);
            var processInfo = new ProcessStartInfo(toolPath, toolarguments);
            processInfo.WorkingDirectory = workingDirectory;
            processInfo.CreateNoWindow = true;
            processInfo.UseShellExecute = false;
            processInfo.RedirectStandardError = true;
            processInfo.RedirectStandardOutput = true;

            var process = Process.Start(processInfo);

            process.OutputDataReceived += (sender, e) => _Log.Info(e.Data);
            process.BeginOutputReadLine();

            process.ErrorDataReceived += (sender, e) => _Log.Error(e.Data);
            process.BeginErrorReadLine();

            process.WaitForExit();

            _Log.InfoFormat("External tool [{0}] is done with exit code: {1}", Path.GetFileName(toolPath), process.ExitCode);
            process.Close();
        }

现在运行使用

之类的.cmd批处理文件时
call c:\myprogram.exe 

从myprogram.exe收到的所有输出都被导入ErrorDataReceived事件。

现在我确实希望它被记录但我想记录子进程和错误的信息..我错过了什么?或者它只是.NET框架中的一个错误?

0 个答案:

没有答案