Cómo obtener el registro de Process.Start
-
18-09-2020 - |
Pregunta
Voy a precompilar una aplicación asp.net en mi formulario C# personalizado.¿Cómo recupero los registros del proceso y verifico si es un proceso exitoso o no?
Aquí está mi código
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);
¡Gracias!
Solución
Establecer su ProcessStartInfo.RedirectStandardOutput
a true
- esto redirigirá toda la salida a Process.StandardOutput
, que es una secuencia que puedes leer para encontrar todos los mensajes de salida:
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();
También puedes utilizar el OutputDataReceived
evento de manera similar a lo que @Bharath K describe en su respuesta.
Hay propiedades/eventos similares para StandardError
- necesitarás configurar RedirectStandardError
a true
también.
Otros consejos
En su solicitud de solicitud de origen para el evento ERRORDATARECEEDED:
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( );
Cualquier error lanzado en la aplicación de destino puede escribir datos en esto.Algo así:
Console.Error.WriteLine( errorMessage ) ;