How to get log from Process.Start

£可爱£侵袭症+ 提交于 2019-12-01 06:29:34

Set your ProcessStartInfo.RedirectStandardOutput to true - this will redirect all output to Process.StandardOutput, which is a stream that you can read to find all output messages:

ProcessStartInfo process = new ProcessStartInfo 
{ 
   CreateNoWindow = false,
   UseShellExecute = false,
   WorkingDirectory = msPath,
   RedirectStandardOutput = true,
   FileName = msCompiler,
   Arguments = "-p {0} -v / {1}"
            .StrFormat(
              CurrentSetting.CodeSource, 
              CurrentSetting.CompileTarget)
};

Process p = Process.Start(process);
string output = p.StandardOutput.ReadToEnd();

You can also use the OutputDataReceived event in a similar way to what @Bharath K describes in his answer.

There are similar properties/events for StandardError - you will need to set RedirectStandardError to true as well.

In your source application register for the ErrorDataReceived event:

StringBuilder errorBuilder = new StringBuilder( );
reportProcess.ErrorDataReceived += delegate( object sender, DataReceivedEventArgs e )
{
    errorBuilder.Append( e.Data );
};
//call this before process start
reportProcess.StartInfo.RedirectStandardError = true;
//call this after process start
reportProcess.BeginErrorReadLine( );

Any error thrown in the target application can write data into this. Something like this:

Console.Error.WriteLine( errorMessage ) ;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!