Ich habe einen DOS-Prozess eines Drittanbieters, der Daten über seinen Fortschritt in die Befehlszeile schreibt.
Ich möchte auf den Fortschritt reagieren. Normalerweise würde ich ein Process
mit RedirectStandardOutput = true
und RedirectStandardError = true
und dann
Normalerweise funktioniert das. und ich habe was ich brauche als DataReceivedEventArg.
In diesem Fall scheint der Prozess die gleiche Zeile zu aktualisieren (wie ist das möglich?), also schreibt er 15%, 15% ändert sich auf 18% und so weiter. Nur am Ende der Ausführung scheint es, dass die Daten zu StandardOutput gespült werden.
Auch wenn ich versuche, Daten in eine Textdatei zu leiten (zB odb.exe >> output.txt
), wird nichts angezeigt.
Gibt es eine Möglichkeit, die temporären Daten zu erhalten?
Die Frage geht nicht darum, die Standardausgabe zu bekommen, das funktioniert gut (synchron und asynchron). Es geht darum, wie man von einem Prozess, der nicht geändert werden kann, ausgegeben wird, und der seine Ausgabe nicht in den Standard-Stream zu übertragen scheint.
Ich denke, das ist, was Sie suchen: C #: Redirect Konsolenanwendung Ausgabe: Wie die Ausgabe zu fluten?
Wenn ich falsch liege, lass es mich wissen.
Wie juharr sagt, müssen Sie Win32 verwenden, um die Konsole zu scrappen. Glücklicherweise müssen Sie diesen Code nicht selbst schreiben. Sie können den Pufferleser von diesem Beitrag verwenden: Ссылка
Der BufferReader liest von Standardout. Ich nehme an, Sie schreiben eine WPF- oder WinForms-Anwendung, daher müssen wir auch einen Verweis auf das Konsolenfenster der DOS-Anwendung erhalten. Dazu verwenden wir den Win32-API-Aufruf AttachConsole.
%Vor%Ich habe ein kleines Beispielprogramm geschrieben, das die Verwendung demonstriert. Es startet die exe und hängt sich an ihre Konsole an. Anschließend wird das gesamte Fenster einmal pro Sekunde gescannt und die Ausgabe an das Debugger-Ausgabefenster ausgegeben. Sie sollten in der Lage sein, dies zu ändern, um den Konsoleninhalt nach beliebigen Schlüsselwörtern usw. zu durchsuchen, mit denen Sie den Fortschritt des Programms verfolgen können. Oder Sie könnten es in ein Textfeld oder etwas in Ihrer Benutzeroberfläche ablegen, möglicherweise nach dem Vergleich für Änderungen?
%Vor%Viel Glück!
Tags und Links c#