Как получить журнал из Process.Start - PullRequest
4 голосов
/ 21 июля 2010

Я собираюсь предварительно скомпилировать приложение 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);

Спасибо!

Ответы [ 2 ]

5 голосов
/ 21 июля 2010

Установите 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.

2 голосов
/ 21 июля 2010

В исходном приложении зарегистрируйтесь для события 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 ) ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...