CMD in Form auslesen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von SidezockingLP.

    CMD in Form auslesen

    Hey liebe Community :)

    Hab heute mal eine Frage an euch von der ihr bestimmt schonmal gehört habt denn es gab dazu schon mehrere Einträge hier im Forum. Natürlich habe ich mir alles gefundene angeschaut aber leider trotzdem keine Lösung für mein Problem gefunden deshalb erstelle ich nochmal ein neues Thema

    Mein Ziel: Öffnen einer CMD in einem Prozess & dann auslesen aller Zeilen der CMD in eine Listbox oder Textbox

    Dafür habe ich jetzt probiert, auch mit Hilfe der anderen Forumeinträge, einen Code zu schreiben. Das ist mein Ergebnis:

    VB.NET-Quellcode

    1. Dim Output As System.IO.StreamReader
    2. With p.StartInfo
    3. .CreateNoWindow = False 'Aus DEbugzwecken auf False
    4. .WorkingDirectory = "" & My.Settings.Serverstart & ""
    5. Logme("setze abrbeitspfad auf " & My.Settings.Serverstart & "", 0) 'Einfach ein Log net wundern
    6. .FileName = "cmd"
    7. .RedirectStandardInput = True 'Hab ich auf true gesetzt
    8. .RedirectStandardOutput = True
    9. .UseShellExecute = False
    10. End With
    11. p.Start()
    12. Output = p.StandardOutput
    13. Logme("Starte Prozess", 0)
    14. Logme("ProzessID: " & p.Id.ToString, 0)
    15. Logme("ProzessName: " & p.ProcessName, 0)
    16. Await Task.Delay(20)
    17. p.StandardInput.WriteLine("cd " & My.Settings.Serverstart)
    18. p.StandardInput.WriteLine("java -Xmx" & Auslesen(4) & " -jar " & My.Settings.Serverstart & "\" & Auslesen(3) & "&#13")
    19. Logme("starte Server mit : p.StandardInput.WriteLine(java -Xmx" & Auslesen(4) & "G -jar " & My.Settings.Serverstart & "\" & Auslesen(3) & "&#13", 0)
    20. p.StandardInput.WriteLine("exit")
    21. Do
    22. Try
    23. TextBox7.Text = TextBox7.Text & vbNewLine & Output.ReadLine
    24. Catch ex As Exception
    25. End Try
    26. Loop


    Mit diesem Code funktioniert eigentlich alles Perfekt(=Also öffnen der CMD, zeilen reinschreiben usw). Das Problem ist dass mir alle Zeilen der CMD in der Listbox erst nach dem schließen der CMD angezeigt werden :(

    Meine Frage: Habt ihr eine Idee wie das "Live" geht, also wenn im CMD fenster etwas ausgegeben wird, dass diese Zeile direkt auch in die Listbox ausgelesen wird?

    Hoffe ihr könnt mir helfen :) MFG
    @SidezockingLP Meinst Du so was, Form mit 2 Button, TextBox zum Schreiben, RichTextBox zum Empfangen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents cmd As Process
    3. Private Sub btnSend_Click(sender As Object, e As EventArgs) Handles btnSend.Click
    4. cmd.StandardInput.WriteLine(TextBox1.Text)
    5. End Sub
    6. Private Sub btnConnect_Click(sender As Object, e As EventArgs) Handles btnConnect.Click
    7. StartProcess()
    8. End Sub
    9. Sub StartProcess()
    10. cmd = New Process
    11. cmd.StartInfo.FileName = "cmd.exe"
    12. cmd.StartInfo.WorkingDirectory = ""
    13. cmd.StartInfo.CreateNoWindow = True
    14. cmd.StartInfo.UseShellExecute = False
    15. cmd.StartInfo.RedirectStandardOutput = True
    16. cmd.StartInfo.RedirectStandardInput = True
    17. AddHandler cmd.OutputDataReceived, AddressOf WriteProcessOutput
    18. cmd.Start()
    19. cmd.BeginOutputReadLine()
    20. End Sub
    21. Private Sub WriteProcessOutput(ByVal sender As Object, ByVal e As DataReceivedEventArgs)
    22. If e.Data IsNot Nothing Then
    23. Me.Invoke(Sub() RichTextBox1.AppendText(e.Data & Environment.NewLine))
    24. End If
    25. End Sub
    26. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!