我有以下方法启动一个进程并将标准输出挂钩到控制台应用程序我正在创建。
_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框架中的一个错误?