Controlling cmd.exe von Winforms
Frage: ich will Kontrolle cmd.exe von winforms.
Ich meine NICHT jeder Befehl in einem einzelnen Prozess, mit startupinfo, und dann zu stoppen.
Ich meine zum Beispiel der start der (My) SQL-oder GDB-Eingabeaufforderung, Befehl senden, empfangen, beantworten, senden Sie folgenden Befehl, bekomme nächste Antwort, stoppen der SQL-Eingabeaufforderung
exit-Prozess.
Grundsätzlich möchte ich Schreibe eine GUI, die auf einem Konsole-Anwendung.
Will ich die Ausgabe von cmd.exe Weiterleitung auf ein textfield, und der Eingang kommt von einem anderen textfield (drücken Sie auf enter/OK-Taste).
Ich nicht finden keine Proben.
Gibt es eine Möglichkeit?
InformationsquelleAutor Stefan Steiger | 2010-11-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein schönes Beispiel auf CodeProject
Glück!
-Edit:
Ich denke, das ist mehr, wie es ist, habe ich eine einfache form, 2 Textfelder und drei Tasten.
Die erste textbox ist für den command-Eintrag, die zweite (multiline), zeigt das Ergebnis.
Den ersten button der den Befehl ausführt, wird der zweite button aktualisiert die Ergebnis - (, weil die Ergebnisse Lesen async)
In der Abbildung können Sie sehen, dass ich in die cd\ Befehl zum Verzeichnis wechseln und die nächste ausgeführte Befehl in diesem Verzeichnis (dir).
InformationsquelleAutor Pieter
Brauchen Sie nicht interop. Die .NET
Process
- Klasse gibt Ihnen alles, was Sie brauchen, einfach umleiten von standard-Eingabe-stream und output-stream, und es ist getan. Finden Sie viele Beispiele, wie dies zu tun auf dem internet.InformationsquelleAutor codymanix
Brauchen Sie nicht zu verwenden cmd.exe für diese können Sie rufen Sie die Befehle direkt mit
Process.Start()
. Wenn Sie umleiten StandardInput und StandardOutput-können Sie den Prozess Steuern.Ich geschrieben habe, ein Beispiel, wie eine Antwort auf eine andere Frage.
Bearbeiten
Ich habe nicht ein komplettes Beispiel für die it, aber man konnte hören, StandardOutput mit dem
- Prozess.OutputDataReceived
Ereignis, wenn Sie nicht warten möchten, synchron. Da ist ein Beispiel auf der MSDN-Seite.Ich aktualisiert meine Antwort mit einem link zu der OutputDataReceived Fall, dass vielleicht sinnvoller in deinem Fall.
InformationsquelleAutor Albin Sunnanbo
Ist dies die perfekte Antwort:
Früher habe ich versucht mit wile Ausgabestrom.Peek() != -1
aber das bekommt stürzte durch einen bug in der .NET framework-Peek-Funktion, die nicht bei timeout oder einen Fehler auslösen, wenn Sie Lesen über die end-of-stream...
Funktioniert es besser, daß es wirklich ins all-Ausgang, aber es ist weit von perfekt.
InformationsquelleAutor Stefan Steiger