So erhalten Sie ein Protokoll von Process.Start
-
18-09-2020 - |
Frage
Ich werde eine asp.net-Anwendung in meinem benutzerdefinierten C#-Formular vorkompilieren.Wie rufe ich die Prozessprotokolle ab und überprüfe, ob es sich um einen erfolgreichen Prozess handelt oder nicht?
Hier ist mein Code
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);
Danke!
Lösung
Setze deine ProcessStartInfo.RedirectStandardOutput
Zu true
- Dadurch wird die gesamte Ausgabe umgeleitet Process.StandardOutput
, Dies ist ein Stream, den Sie lesen können, um alle Ausgabenachrichten zu finden:
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();
Sie können auch die verwenden OutputDataReceived
Ereignis auf ähnliche Weise wie das, was @Bharath K in seiner Antwort beschreibt.
Es gibt ähnliche Eigenschaften/Ereignisse für StandardError
- Sie müssen einstellen RedirectStandardError
Zu true
sowie.
Andere Tipps
In Ihrem Quellanwendungsregister für das ErrordrorteCeiche Event:
generasacodicetagpre.Jeder Fehler, der in der Zielanwendung geworfen wurde, kann Daten in diese schreiben.So etwas wie folgt:
generasacodicetagpre.