2017-01-26 1 views
1

Ich habe ein cmd in mein Programm aufgenommen, aber ich kann Befehle wie "cd" oder "@echo off" nicht verwenden, weil es einen neuen Befehl startet für jeden BefehlWie man cmd in mein Programm einfügt (und nicht nur einen einzigen Befehl ausführt)

if (e.KeyChar == (char)13) 
{ 
    Process cmd = new Process(); 
    cmd.StartInfo.FileName = "cmd.exe"; 
    cmd.StartInfo.RedirectStandardInput = true; 
    cmd.StartInfo.RedirectStandardOutput = true; 
    cmd.StartInfo.CreateNoWindow = true; 
    cmd.StartInfo.UseShellExecute = false; 
    cmd.Start(); 
    cmd.StandardInput.WriteLine(textBox1.Text); 
    cmd.StandardInput.Flush(); 
    cmd.StandardInput.Close(); 
    cmd.WaitForExit(); 

    richTextBox1.Text = cmd.StandardOutput.ReadToEnd(); 
} 

Was sollte es so sein: wenn Sie in einem Befehl in textbox1 und drücken tipe eingeben, sollten RichTextBox1 die Ausgabe angezeigt werden, und Sie können in den nächsten Befehl

+1

Werfen Sie einen Blick darauf: https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds_shelloverview.mspx?mfr=true Es zeigt, wie Sie mehrere Befehle ausführen können in einer einzigen Zeile. Erstellen Sie einfach eine Zeichenfolge mit den entsprechenden Trennzeichen und übergeben Sie alle Befehle gleichzeitig. –

+0

aber wenn Sie die Ausgabe sehen möchten, bevor Sie in den nächsten Befehl (wie dir) tippe – SinOfficial

+1

Sie könnten eine temporäre Charge in Ihrem Programm erstellen und dann diese ausführen, jedoch ohne wirklich zu wissen, was Sie tun möchten, ist es ein bisschen schwer zu empfehlen mehr – Icepickle

Antwort

0

tipe wenn Sie möchten integriere die Befehlszeile in deine Anwendung Ich würde empfehlen, sie im Hintergrund zu starten und dann einfach ihren Input-Stream zu füttern und ihre Ausgabe zu lesen.

Auf diese Weise erstellen Sie eine Art Pipeline.

StreamWriter writer = new StreamWriter(process.StandardInput); 
StreamReader reader = new StreamReader(process.StandardOutput); 

Shop Bezug auf diese Ströme und es genau wie verwenden:

writer.WriteLine("dir"); 
string line = reader.ReadLine(); 

Diese Methode wird effizienter dann Befehlszeile jedes Mal läuft nur einen Befehl zu verarbeiten.

Verwandte Themen