CMD Text Übergeben

  • VB.NET
  • .NET (FX) 4.0

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Joshi.

    CMD Text Übergeben

    Hallo zusammen,

    ich möchte der CMD (steamcmd) Text übergeben

    Starten der CMD

    VB.NET-Quellcode

    1. steamCMD = New Process
    2. steamCMD.StartInfo.FileName = Application.StartupPath & "\steamcmd\steamcmd.exe"
    3. steamCMD.StartInfo.CreateNoWindow = True
    4. steamCMD.StartInfo.UseShellExecute = False
    5. steamCMD.StartInfo.RedirectStandardOutput = True
    6. steamCMD.StartInfo.RedirectStandardInput = True
    7. AddHandler steamCMD.OutputDataReceived, AddressOf WriteProcessOutput
    8. steamCMD.Start()


    Aufruf auslesen

    VB.NET-Quellcode

    1. Private Sub WriteProcessOutput(ByVal sender As Object, ByVal e As DataReceivedEventArgs)
    2. If e.Data IsNot Nothing Then
    3. Me.Invoke(Sub() RichTextBox1.AppendText(e.Data & Environment.NewLine))
    4. End If
    5. End Sub



    Text Übergeben

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. steamCMD.StandardInput.WriteLine(TextBox1.Text)
    3. End Sub


    nur leider passiert nichts...

    weiß jemand was ich falsch mache?

    Mfg

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xX-Nick-Xx“ ()

    Jou.

    xX-Nick-Xx schrieb:

    VB.NET-Quellcode

    1. steamCMD.StartInfo.UseShellExecute = False
    Machst Du

    VB.NET-Quellcode

    1. steamCMD.StartInfo.UseShellExecute = True

    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!

    RodFromGermany schrieb:

    Machst Du

    dann kommt das:

    System.InvalidOperationException: "Für das Prozessobjekt muss die UseShellExecute-Eigenschaft auf "false" festgelegt sein, um IO-Streams umzuleiten."


    Code jetzt

    VB.NET-Quellcode

    1. ​ steamCMD = New Process
    2. steamCMD.StartInfo.FileName = Application.StartupPath & "\steamcmd\steamcmd.exe"
    3. steamCMD.StartInfo.CreateNoWindow = True
    4. steamCMD.StartInfo.UseShellExecute = True
    5. steamCMD.StartInfo.RedirectStandardOutput = True
    6. steamCMD.StartInfo.RedirectStandardInput = True
    7. steamCMD.Start()
    8. AddHandler steamCMD.OutputDataReceived, AddressOf WriteProcessOutput
    9. myStreamWriter = steamCMD.StandardInput


    und im Button

    VB.NET-Quellcode

    1. ​ myStreamWriter.WriteLine(TextBox1.Text)




    @xX-Nick-Xx Sorry.
    Ich hab hier ein Testprogramm mit der cmd.exe, sollte bei Dir genau so laufen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private WithEvents Cmd As Process
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. If Cmd Is Nothing OrElse Cmd.HasExited Then
    5. Cmd = New Process()
    6. Cmd.StartInfo.ErrorDialog = True
    7. Cmd.StartInfo.UseShellExecute = False
    8. Cmd.StartInfo.RedirectStandardInput = True
    9. Cmd.StartInfo.RedirectStandardOutput = True
    10. Cmd.StartInfo.RedirectStandardError = True
    11. Cmd.StartInfo.FileName = "cmd.exe"
    12. Cmd.StartInfo.CreateNoWindow = CheckBox1.Checked
    13. Cmd.StartInfo.StandardOutputEncoding = System.Text.Encoding.Default
    14. Cmd.Start()
    15. Cmd.BeginOutputReadLine()
    16. End If
    17. Cmd.StandardInput.WriteLine("cd c:\Temp")
    18. Cmd.StandardInput.WriteLine("dir ")
    19. End Sub
    20. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    21. If Cmd Is Nothing OrElse Cmd.HasExited Then
    22. Me.TextBox1.AppendText("Bitte erst Button1 drücken" & Environment.NewLine)
    23. Return
    24. End If
    25. Cmd.StandardInput.WriteLine("Notepad.exe")
    26. End Sub
    27. Private Sub cmdHandler(ByVal sendingProcess As Object, ByVal outLine As DataReceivedEventArgs) Handles Cmd.OutputDataReceived
    28. If Not String.IsNullOrEmpty(outLine.Data) Then
    29. Me.Invoke(Sub() Me.TextBox1.AppendText(Environment.NewLine & outLine.Data))
    30. End If
    31. End Sub
    32. Private Sub cmdHandler2(ByVal sendingProcess As Object, ByVal outLine As DataReceivedEventArgs) Handles Cmd.ErrorDataReceived
    33. If Not String.IsNullOrEmpty(outLine.Data) Then
    34. Me.Invoke(Sub() Me.TextBox2.AppendText(Environment.NewLine & outLine.Data))
    35. End If
    36. End Sub
    37. Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    38. Try
    39. If Cmd IsNot Nothing Then
    40. Cmd.StandardInput.Flush()
    41. Cmd.StandardInput.Close()
    42. Cmd.CancelOutputRead()
    43. Cmd.Close()
    44. End If
    45. Catch
    46. End Try
    47. End Sub
    48. 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!

    RodFromGermany schrieb:

    Ich hab hier ein Testprogramm mit der cmd.exe, sollte bei Dir genau so laufen:


    Danke erstmal dafür.

    Leider wird in der Listbox nichts angezeigt.
    (wenn ich Writeline durchführe)

    Code

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. If steamCMD Is Nothing OrElse steamCMD.HasExited Then
    3. steamCMD = New Process()
    4. steamCMD.StartInfo.ErrorDialog = True
    5. steamCMD.StartInfo.UseShellExecute = False
    6. steamCMD.StartInfo.RedirectStandardInput = True
    7. steamCMD.StartInfo.RedirectStandardOutput = True
    8. steamCMD.StartInfo.RedirectStandardError = True
    9. steamCMD.StartInfo.FileName = Application.StartupPath & "\steamcmd\steamcmd.exe"
    10. steamCMD.StartInfo.CreateNoWindow = True
    11. steamCMD.StartInfo.StandardOutputEncoding = System.Text.Encoding.Default
    12. steamCMD.Start()
    13. steamCMD.BeginOutputReadLine()
    14. End If
    15. ' steamCMD.StandardInput.WriteLine("cd c:\Temp")
    16. 'steamCMD.StandardInput.WriteLine("dir ")
    17. End Sub


    VB.NET-Quellcode

    1. Private Sub cmdHandler(ByVal sendingProcess As Object, ByVal outLine As DataReceivedEventArgs) Handles steamCMD.OutputDataReceived
    2. If Not String.IsNullOrEmpty(outLine.Data) Then
    3. Me.Invoke(Sub() ListBox1.Items.Add(outLine.Data))
    4. End If
    5. End Sub
    6. Private Sub cmdHandler2(ByVal sendingProcess As Object, ByVal outLine As DataReceivedEventArgs) Handles steamCMD.ErrorDataReceived
    7. If Not String.IsNullOrEmpty(outLine.Data) Then
    8. Me.Invoke(Sub() ListBox1.Items.Add(outLine.Data)) 'Me.TextBox2.AppendText(Environment.NewLine & outLine.Data))
    9. End If
    10. End Sub
    11. Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    12. Try
    13. If steamCMD IsNot Nothing Then
    14. steamCMD.StandardInput.Flush()
    15. steamCMD.StandardInput.Close()
    16. steamCMD.CancelOutputRead()
    17. steamCMD.Close()
    18. End If
    19. Catch
    20. End Try
    21. End Sub


    Aufruf

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. steamCMD.StandardInput.WriteLine("help")
    3. End Sub


    der Output klappt ohne Probleme, aber senden klappt nicht...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xX-Nick-Xx“ ()

    Dann setz doch mal bei If Not String.IsNullOrEmpty(outLine.Data) Then ein Breakpoint und schau dir outLine.Data an?
    beim Debug ist immer nur die Meldung erschienen, das der Code nicht ausgeführt wurde.
    also geht er dort anscheinend nach dem Starten nicht mehr rein.

    nach mehreren Tests, weiß ich jetzt nicht mehr weiter.

    @RodFromGermany hast du es nur mit der cmd.exe versucht, oder auch mit der SteamCMD?
    Anbei mal der Link zur SteamCMD

    xX-Nick-Xx schrieb:

    oder auch mit der SteamCMD?
    Nö, ich hab nur mit CMD gearbeitet.
    Ich habe keine Lust, wegen eines Tests eine Exe runter zu laden. Sorry.
    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!