ProcessInfo und RedirectStandardOutput
Ich habe eine app die Anrufe, die einem anderen Prozess in einem Befehlsfenster, und dieser Prozess hat die Aktualisierung von Statistiken, dass die Ausgabe in der Konsole-Fenster. Ich dachte, das war eine ziemlich einfache operation, aber ich kann nicht scheinen, um es zu arbeiten. Bin ich etwas fehlt?
string assemblyLocation = Assembly.GetExecutingAssembly().Location;
Process process = new Process
{
ProcessStart =
{
RedirectStandardOutput = true,
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Hidden,
Arguments = arg,
FileName = assemblyLocation.Substring(0, assemblyLocation.LastIndexOf("\\")) + "\\ffmpeg.exe",
CreateNoWindow = true
}
};
process.Start();
Console.WriteLine(process.StandardOutput.ReadToEnd());
process.WaitForExit();
Ideal, was ich möchte, ist, wie der Ausgang sich ändert, in diesem Prozess den ich getroffen oder von Daten kommt, in die Leser, dass ich Ereignisse aus.
Jede Hilfe wäre toll, ich fühle mich wie das ist eine newbie-Frage, aber scheinen etwas zu fehlen.
InformationsquelleAutor der Frage Brandon Grossutti | 2009-07-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich erlebt. Manchmal, in welcher Weise der Prozess, die Sie aufrufen Ausgaben an die console ist nicht kompatibel mit dieser Art von Ausgabe-Umleitung. Ich habe das Glück, in diesem Fall in der Lage sein, ändern Sie den externen Prozess, dies zu umgehen.
Könnten Sie versuchen, Ihren code ausführen auf einem anderen Prozess, die Ausgaben an die Konsole, und sehen, ob es ordnungsgemäß funktioniert. Es liest von rechts auf mich jetzt.
EDIT:
Ging ich und zog einen code-block habe ich verwendet, um dies zu tun. Dies ist in einer WPF-Anwendung die leitet den Prozess-Ausgang an die Fenster. Ankündigung der Veranstaltung verbindlich. Da das WPF-ich rufen meinen Anruf um die Daten zu schreiben. Da Sie nicht besorgt über die Sperrung, die Organisationseinheit sollte in der Lage sein zu ersetzen, die mit:
Hoffentlich hilft es!
InformationsquelleAutor der Antwort patjbs
Ich bin mir nicht ganz sicher, welches problem Sie laufen in, aber wenn Sie schauen, zu handeln, auf den Ausgang, sobald es erzeugt ist, versuchen Sie einbinden in den Prozess
OutputDataReceived
Veranstaltung. Sie können angeben, Handler zum empfangen der Ausgabe asynchron aus dem Prozess. Ich habe diese Methode erfolgreich...
Sehen die OutputDataReceived Ereignis-off-Prozess für weitere Informationen.
InformationsquelleAutor der Antwort Michael Petrotta
Verwendung von lambda-Ausdrücken, etc:
InformationsquelleAutor der Antwort abatishchev
Interessanterweise kann man nicht Lesen von standard-output und standard-error in der gleichen Zeit:
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput(v=vs. 71).aspx
InformationsquelleAutor der Antwort Matthew Lock
fließenden code war in VS2010
InformationsquelleAutor der Antwort Rock
Überprüfen Sie, dass die Ausgabe, die Sie erwarten nicht gesendet wird, um die Standardfehler-Ausgabe statt der StandardOutput-Ausgabe
InformationsquelleAutor der Antwort stackuser83