Как получить журнал из Process.Start
-
18-09-2020 - |
Вопрос
Я собираюсь предварительно скомпилировать приложение asp.net в своей собственной форме C#.Как мне получить журналы процессов и проверить, является ли это успешным процессом или нет?
Вот мой код
string msPath = "c:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\";
string msCompiler = "aspnet_compiler.exe";
string fullCompilerPath = Path.Combine(msPath, msCompiler);
msPath.ThrowIfDirectoryMissing();
fullCompilerPath.ThrowIfFileIsMissing();
ProcessStartInfo process = new ProcessStartInfo
{
CreateNoWindow = false,
UseShellExecute = false,
WorkingDirectory = msPath,
FileName = msCompiler,
Arguments = "-p {0} -v / {1}"
.StrFormat(
CurrentSetting.CodeSource,
CurrentSetting.CompileTarget)
};
Process.Start(process);
Спасибо!
Решение
Установите свой ProcessStartInfo.RedirectStandardOutput
к true
- это перенаправит весь вывод на Process.StandardOutput
, который представляет собой поток, который вы можете прочитать, чтобы найти все выходные сообщения:
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();
Вы также можете использовать OutputDataReceived
событие аналогично тому, что @Bharath K описывает в своем ответе.
Есть похожие объекты/события для StandardError
- вам нужно будет установить RedirectStandardError
к true
также.
Другие советы
В вашем исходном приложении Регистр для события ErrorDatareCeived:
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( );
.
Любая ошибка, брошенная в целевом приложении, может записывать данные в это.Что-то вроде этого:
Console.Error.WriteLine( errorMessage ) ;
.