Ich kann einen Befehlszeilenprozess mit process.start()
ausführen. Ich kann Eingabe mit Standardeingabe bereitstellen. Wenn der Prozess danach erneut Benutzereingaben verlangt, wie kann mein Programm die Eingabe an diese EXE weitergeben?Führen Sie interaktive Befehlszeile exe mit C#
Antwort
Es gibt eine example here, die ähnlich klingt, was Sie brauchen, mit Process.StandardInput
und StreamWriter
.
Process sortProcess;
sortProcess = new Process();
sortProcess.StartInfo.FileName = "Sort.exe";
// Set UseShellExecute to false for redirection.
sortProcess.StartInfo.UseShellExecute = false;
// Redirect the standard output of the sort command.
// This stream is read asynchronously using an event handler.
sortProcess.StartInfo.RedirectStandardOutput = true;
sortOutput = new StringBuilder("");
// Set our event handler to asynchronously read the sort output.
sortProcess.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);
// Redirect standard input as well. This stream
// is used synchronously.
sortProcess.StartInfo.RedirectStandardInput = true;
sortProcess.Start();
// Use a stream writer to synchronously write the sort input.
StreamWriter sortStreamWriter = sortProcess.StandardInput;
// Start the asynchronous read of the sort output stream.
sortProcess.BeginOutputReadLine();
Console.WriteLine("Ready to sort up to 50 lines of text");
String inputText;
int numInputLines = 0;
do
{
Console.WriteLine("Enter a text line (or press the Enter key to stop):");
inputText = Console.ReadLine();
if (!String.IsNullOrEmpty(inputText))
{
numInputLines ++;
sortStreamWriter.WriteLine(inputText);
}
}
Hoffnung, die
danke nochmal. aber das ist spezifisch für sort.exe ich miere exe zur Laufzeit für jeden Benutzer. Ich weiß nicht, welches Programm er tippen wird. – rajshades
Ich denke, Sie können "cmd.exe" anstelle der ausführbaren Datei verwenden, die sie ausgewählt haben. Es ist ein hack, aber es könnte die Arbeit erledigt –
Liebe robert können Sie erklären, wie Sie cmd.exe für mein Problem verwenden – rajshades
Wenn ich richtig verstanden habe, denke ich, dass Sie in der Lage sein sollten, dies zu tun, indem Sie die Standardeingabe/-ausgabe mit RedirectStandardOutput und RedirectStandardInput umleiten.
Das WinSCP-Projekt verfügt über ein C# -Probe für die Kommunikation auf diese Weise. Sie können es hier finden: SFTP file transfers in .NET (obwohl diese Probe nur die Ausgabe sammelt, ohne sie überhaupt verwendet wird, aber die Technik sollte gleich sein.)
Danke für Ihre Antwort. Ich versuchte es. aber der Prozess, der Benutzereingaben erfordert, ist nicht vordefiniert. Das Szenario ist wie 1. Ich möchte Online Compliler für C# 2. Ich kann das Programm mit Code dom n creatae exe 3. Jetzt möchte ich diese exe durch c laufen lassen # 4. Benutzer kann jede Art von schreiben Programm, das Benutzereingaben in Diff-Phase benötigt. hoffe, dass du das ganze Szenario verstanden hast – rajshades
@rajshades: Ich hätte gedacht, dass das ähnlich wäre, nur dass, anstatt alle Befehle auf einmal zu senden, du einen Befehl eingibst, die Ausgabe liest, den nächsten Befehl sendest usw. Obwohl ich das nicht getestet habe. Als allgemeine Anmerkung, wenn Sie die exe erstellen, können Sie nicht versuchen, es besser zu kommunizieren (WCF, TCP/IP sockects, name pipes usw.)? –
hilft Sie wollen IPC nachschlagen. Wie Robert oben gezeigt hat, wird Ihnen die Klasse Process
in .NET helfen. Aber speziell für Ihr Problem (wissen, wann man Daten schreibt): Sie können nicht. Nicht generisch.
Wenn Sie die erforderliche Eingabe (z. B. "yyy") kennen, können Sie sie im STDIN
des erstellten Prozesses angeben. Sie müssen nicht auf das Programm warten, um diese Information anzufordern: Es wird gerade von STDIN
lesen, wenn es Daten will.
Wenn Sie die Programmausgaben verarbeiten müssen, um zu entscheiden, was in STDIN
geschrieben werden soll, lesen Sie die Prozesse . Sie könnten jedoch Probleme mit dem Spülen haben, obwohl ...
- 1. Führen Sie eine EXE-Datei mit node.js
- 2. führen Sie interaktive Befehlszeilenanwendung von Java
- 3. Führen Sie zeitraubende .exe von Microsoft Azure
- 4. Ausführen der Befehlszeile .exe mit Parametern in C#
- 5. So führen Sie EXE auf Remote-PC mit psexec
- 6. So führen Sie cssnano von der Befehlszeile
- 7. Führen Sie die neueste EXE-Datei im Ordner über Powershell
- 8. Führen Sie PHP-Skript von der Befehlszeile mit der Variablen
- 9. Führen Sie eine EXE aus einem anderen Verzeichnis aus?
- 10. Führen Sie einen Befehl als Befehlszeile aus einer Symfony-Funktion
- 11. So entfernen Sie den exe-Teil der Befehlszeile
- 12. Führen Sie CMD-Befehle mit C++
- 13. So führen Sie OCTest über die Befehlszeile aus, nicht XCode
- 14. Führen Sie eine Ruby-Bibliothek von der Befehlszeile aus
- 15. Führen Sie die JUnit Testsuite über die Befehlszeile aus
- 16. Kann das interaktive C# -Fenster mit meinem Code interagieren?
- 17. Führen Sie interaktives Programm mit Apache Ant
- 18. Führen Sie AppleScript aus C
- 19. Dateiextrahierung mit Standalone-Exe - C#
- 20. C#: Arbeiten mit separaten .exe
- 21. Führen Sie vim Befehl von der Befehlszeile aus
- 22. Führen Sie Word 2013 von der Befehlszeile aus
- 23. Pycharm Einheit Test interaktive Debug-Befehlszeile funktioniert nicht
- 24. C# Reporting Control (Interaktive Berichte)
- 25. EXE Packer/EXE Compressor für C#/VB.net
- 26. C++ Quellcode zu exe
- 27. Plattformübergreifend, Interaktive textbasierte Schnittstelle mit Befehlsabschluss
- 28. Ersetzen Sie Zeichenfolgen in nativen .exe mit C#
- 29. Git Interaktive Zusammenführung?
- 30. C++ Exe-Verschlüsselung?
Sie könnten sich für [diesen Beitrag] interessieren (http://www.codeducky.org/process-handling-net) deckt viele der Feinheiten der Arbeit mit. NET-Prozesse, insbesondere rund um das Arbeiten mit Eingabe und Ausgabe – ChaseMedallion