[Hilfe] Cmd auslesen / cmd verstecken / befehle an cmd senden

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von LaMiy.

    [Hilfe] Cmd auslesen / cmd verstecken / befehle an cmd senden

    Hey,
    Seit einigen Wochen versuche ich einen Bukkit Server Launcher zu erstellen.
    Wie die Befehle gesendet werden ist klar nur wie gebe ich die cmd.exe in einer Richtextbox wieder?
    Die Richtextbox sollte mit einem timer aktualiesiert werden.
    Wie soll ich das machen ???
    Und wie lasse ich die cmd verschwinden oder verstecken?

    LG
    Forcetraeger
    a) Timer brauchste nicht
    b) Cmd? Wieso cmd?

    Es gibt tausende Ergebnisse wenn du googeln würdest. Sicherheitshalber hab ich aber mal versucht nen Code zu schreiben, der funktionieren müsste. Ist aber ohne IDE geschrieben sprich nur im notepad(und von c# übersetzt) also musste kleine Fehler selbst ausbessern:

    VB.NET-Quellcode

    1. Dim startInfo As New ProcessStartInfo() With { _
    2. Key .CreateNoWindow = True, _
    3. Key .RedirectStandardOutput = True, _
    4. Key .UseShellExecute = False, _
    5. Key .Arguments = "deine startargumente", _
    6. Key .FileName = "dein pfad" _
    7. }
    8. Dim process As New Process()
    9. process.StartInfo = startInfo
    10. AddHandler process.OutputDataReceived,
    11. Sub(s, e)
    12. txtAusgabe.Text += e.Data
    13. End Sub
    14. process.Start()
    15. process.BeginOutputReadLine()


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „thefiloe“ ()

    Erstmal danke..
    cmd weil wenn ich den Server starte oben cmd steht und der Prozess name auch cmd ist ....

    Folgende fehler zeigt er mir an :


    Fehler 2 "startInfo" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\*****\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb 13 29 WindowsApplication1
    Fehler 3 Der Lambda-Parameter "e" verbirgt eine Variable in einem einschließenden Block, eine zuvor definierte Bereichsvariable oder eine implizit im Abfrageausdruck deklarierte Variable. C:\Users\******\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb 16 16 WindowsApplication1
    Fehler 1 Der Name des Felds oder der Eigenschaft, das bzw. die in einem Objektinitialisierer initialisiert wird, muss mit "." beginnen. C:\Users\*****\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb 5 2 WindowsApplication1
    Um mit cmd zu kommunizieren kann man auch System.IO nutzen.

    VB.NET-Quellcode

    1. Dim P As New Process
    2. P.StartInfo.FileName = "cmd"
    3. P.StartInfo.RedirectStandardInput = True
    4. P.StartInfo.RedirectStandardOutput = True
    5. P.StartInfo.UseShellExecute = False
    6. P.Start()
    7. Dim SR As IO.StreamReader = P.StandardOutput
    8. Dim SW As IO.StreamWriter = P.StandardInput
    9. SW.WriteLine("label hahahahaha" & vbNewLine & "exit")
    10. RichTextBox1.Text = SR.ReadToEnd
    11. SW.Close()
    12. SR.Close()
    Habs grad ausprobiert. Dieser Code funktioniert tadellos:

    VB.NET-Quellcode

    1. Sub Main()
    2. Dim startInfo As New ProcessStartInfo() With { _
    3. .CreateNoWindow = True, _
    4. .RedirectStandardOutput = True, _
    5. .RedirectStandardInput = True, _
    6. .UseShellExecute = False, _
    7. .Arguments = "", _
    8. .FileName = "cmd" _
    9. }
    10. Dim process As New Process()
    11. process.StartInfo = startInfo
    12. AddHandler process.OutputDataReceived, Sub(s, e)
    13. Console.WriteLine(e.Data)
    14. 'Debug.WriteLine(e.Data)
    15. End Sub
    16. process.Start()
    17. process.BeginOutputReadLine()
    18. Do While Not process.HasExited
    19. Dim str As String = Console.ReadLine()
    20. process.StandardInput.WriteLine(str)
    21. Loop
    22. End Sub


    Im Ausgabefenster steht:
    Microsoft Windows [Version 6.2.9200]
    (c) 2012 Microsoft Corporation. Alle Rechte vorbehalten.


    In deinem Fall musst du natürlich als FileName java, javaw oder was auch immer angeben und bei Arguments das was du in deiner aktuellen Batch-Datei auch stehen hast(ich gehe mal davon aus du verwendest batch). Sprich irgend eine jar wirds wohl sein + vll. noch Speicher oder kp. was java alles für Argumente hat. Das überlasse ich dann dir.

    @Derfuhr das versteht sich von selbst und ist so ziemlich genau das was ich mache mit dem kleinen Unterschied, dass du für das hier wieder nen Timer und und und brauchst.
    Wieso sollte ich einen StreamReader verwenden? Ein Streamreader liest mir Text aus einem ByteStream. Nur mit dem kleinen Unterschied, dass ich selbst lesen muss. Die Process-Klasse übernimmst das alles schon mit dem OutputDataReceived und stellt mir immer wenn etwas neues im Output steht den Text via Event bereit. Kurz :thumbdown:
    PS. Bei nem Input verstehe ich es nur war dies nicht gefordert.

    EDIT: Hab den Code noch ausgetauscht, falls du doch noch ein Beispiel für eine Eingabe willst(obwohl du nicht erwähnt hast). In dem Beispiel kannste z.B. nen Cmd Eingabe + Ausgabe in deine Konsole umleiten. Du musst es im Prinzip nur noch anpassen.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „thefiloe“ ()

    Dein Programm soll den Server nicht starten sondern nur mithören? Ist das, das was du mir sagen möchtest? Oder kannst du dich endlich mal genau ausdrücken.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Ja... macht ja genau das was du willst.
    Server wird gestartet. Du logst mit und kannst auch schreiben?
    Was willst du denn noch mehr? Du musst exakt 3 Zeilen ersetzen.

    VB.NET-Quellcode

    1. .Arguments = "", _
    2. .FileName = "cmd" _


    VB.NET-Quellcode

    1. Console.WriteLine(e.Data)


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Zu 99% gar nicht. Du kannst dir zwar den Process via Id oder Name holen. Jedoch kommst du nicht an den Text solange der Prozess nicht mit RedictStdOut gestartet wurde.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Nö. Ich schreib dir hier den GESAMTEN Code. Wenn du jetzt noch gaaaaaaaaaaanz ein wenig Englisch kannst und nur die minimalste Grundkenntnisse hast wirste ja wohl den Code hinbekommen. Ich hab dir ja sogar gesagt welche Zeilen. Was soll ich da noch groß tun?

    Wenn du in nen Forum kommst und nur Code kopierst und wieder Fehlermeldungen postest wird das nix. Hab dir eh schon mehr geholfen als ich für normal helfe. Ich meine du musst nur Copy Pasten. Und wenn du das nicht hinbekommst wäre es zeit für nen netten "VeryBasics" Post von EDR. :)


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.