Ich habe ein Problem in meinem Projekt. Ich möchte einen Prozess starten, 7z.exe (Konsolenversion). Ich habe drei verschiedene Dinge versucht:
- Process.StandardOutput.ReadToEnd();
- OutputDataReceived & BeginOutputReadLine
- StreamWriter
Nichts funktioniert. Es ist immer "warten" für das Ende des Prozesses zu zeigen, was ich will. Ich habe keinen Code zu setzen, nur wenn Sie meinen Code mit einem der Dinge, die dort oben aufgeführt sind, wollen. Danke!
Bearbeiten: Mein Code:
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = true;
process.Start();
this.sr = process.StandardOutput;
while (!sr.EndOfStream)
{
String s = sr.ReadLine();
if (s != "")
{
System.Console.WriteLine(DateTime.Now + " - " + s);
}
}
Oder
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.OutputDataReceived += new DataReceivedEventHandler(recieve);
process.StartInfo.CreateNoWindow = true;
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
public void recieve(object e, DataReceivedEventArgs outLine)
{
System.Console.WriteLine(DateTime.Now + " - " + outLine.Data);
}
Oder
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
string output = p.StandardOutput.ReadToEnd();
process.WaitForExit();
Wobei "Prozess" mein vorgefertigter Prozess ist.
Okay, ich weiß, warum es nicht richtig funktioniert: 7z.exe ist der Fehler: es zeigt eine prozentuale Ladezeit in der Konsole an, und es sendet nur Informationen, wenn die aktuelle Datei fertig ist. Beim Extrahieren zum Beispiel funktioniert es gut :). Ich werde nach einer anderen Möglichkeit suchen, die 7z-Funktionen ohne 7z.exe zu nutzen (vielleicht mit 7za.exe oder mit einer DLL). Vielen Dank an alle. Um auf die Frage zu antworten, das Ereignis OuputDataRecieved funktioniert einwandfrei!