CMD auslesen + .Bat starten

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Nevok.

    CMD auslesen + .Bat starten

    Wie die Überschrift schon sagt möchte ich ein CMD Fenster auslesen. Alle Zeilen in dem CMD Fenster sollen in eine Listbox übernommen werden. Sprich der Komplette Text wir in eine Listbox eingefügt. Jetzt ist meine Frage wie ich ein CMD Fenster in eine Listbox übernehmen kann und ob ich die Zeilen Rot färben kann die mit: Uhrzeit [INFO] CraftPlayer: Giving ...... anfangen. Und mein 2. Problem ist, dass starten einer .bat. Diese darf nicht als Administrator ausgeführt werden, und wenn ich sie mit process.start öffne, lädt sie alle datein in den Ordner, wo die .exe liegt. Somit wird der Server nicht gestartet, sondern es wird hauptsächlich ein ''neuer Server'' erstellt. Kann man dies irgendwie umgehen ? Und ja wie.


    TheNevok

    *Ich will nur die Zeilen des CMD's auslesen.
    Mhhh :S
    Leider komme ich mit deinem Beispielcode nicht klat SystemUnknow
    Ich weiß leider nicht so richtig was ich da eintragen muss. Vielleicht kannst du mir ja helfen.

    VB.NET-Quellcode

    1. Dim prog As Process = New Process
    2. prog.StartInfo.FileName = "Starten.bat"
    3. prog.StartInfo.Arguments = "Info"
    4. prog.StartInfo.UseShellExecute = False
    5. prog.StartInfo.RedirectStandardOutput = True
    6. prog.StartInfo.CreateNoWindow = True
    7. prog.Start()
    8. prog.WaitForExit()
    9. Dim so As System.IO.StreamReader = prog.StandardOutput
    10. TextBox1.text = so.ReadToEnd()
    11. so.Close()

    Dies ist der code. Die Datei die den Server startet nennt sich: Starten.bat. Sie liegt im Ordner :D:\Server\Starten.bat.
    Wenn ich das Programm jetzt starte, kommt eine Fehlermeldung, dass das Programm die angegeben Datei nicht finden kann. Ich habe auch schon bei prog.start("D:\Server\Starten.bat") eingefügt. Dies wollte das Programm jedoch auch nicht :S . Würde mich über weitere Hilfe freuen.
    Ja, gut wenn dir irgend-welche dateien fehlen, dann kann ich dir nicht weiter helfen.
    Erstelle irgend-eine premitive batch datei, starte sie und versuch mit dem obigen beispiel den CMD Inhalt auszulesen und in Listbox einfügen.
    Wenn das geschaft hast, dann bist ein schritt weiter.

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

    Um genau zu sein steht das in der .bat

    "Starten.bat"

    @ECHO OFF
    IF /I "%PROCESSOR_ARCHITECTURE:~-2%"=="64" "%ProgramFiles(x86)%\Java\jre6\bin\java.exe" -Xms512M -Xmx512M -jar "%~dp0craftbukkit-0.0.1-snapshot.jar"
    IF /I "%PROCESSOR_ARCHITECTURE:~-2%"=="86" java -Xms512M -Xmx512M -jar "%~dp0craftbukkit-0.0.1-snapshot.jar"

    PAUSE
    Deine Ausgabe in der Textbox kommt vom PAUSE-Befehl

    Die Java-Anwendung wird wahrscheinlich nicht auf den Output-Kanal, sondern auf der Error-Kanal ausgeben.
    Wenn du in der Shell Error auf Output umleitest, bekommst du auch die anderen Ausgaben.

    Im .bat kannst du das mit dem Anhängsel "2>&1" am Ende der Zeile machen.

    Also in etwa so:

    Quellcode

    1. java -Xms512M -Xmx512M -jar "%~dp0craftbukkit-0.0.1-snapshot.jar" 2>&1


    Edit:
    Die elegantere Variante wäre allerding im Startinfo RedirectStandardError auf True zu setzen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    Ich bekomme es leider nicht hin. Wenn ich jetzt die neue .bat starte reagiert mein Programm garnicht erst mehr. Es zeigt aber auch nicht an (Windows 7), dass das Programm nicht meht reagiert. Das Programm ist wie eingefrohren. Laut Windows läuft es aber weiterhin. Es werden keine Texte in der Textbox etc. angezeigt.
    Ich weiß leider nicht wo ich "RedirectStandardError auf True " setzen soll. Dafür bin ich jetzt ein stücken weitergekommen. Mein jetziger Code ist immoment :

    VB.NET-Quellcode

    1. Dim p As New Process
    2. p.StartInfo.UseShellExecute = False
    3. p.StartInfo.RedirectStandardOutput = True
    4. p.StartInfo.FileName = "D:\Server\Starten.bat"
    5. p.StartInfo.Arguments = "say Hallo"
    6. p.Start()
    7. Dim s As String = p.StandardOutput.ReadToEnd
    8. p.WaitForExit()
    9. TextBox1.Text = s
    , wobei der Inhalt des cmd's erst nach dem beenden der java.exe bzw javaw.exe ausgegeben wird. Sprich der Inhalt des cmd's wir in der java.exe ausgegeben. Das cmd Fenster ist nur zum starten des Servers da. Der Rest wird irgendwie in der java.exe ausgeführt. Ich möchte aber ein Programm haben das in echtzeit den Text in die Textbox/Listbox übernimmt. Ich habe ein Programm gefunden das den Code herrausfiltert. Dieses ist hier zu finden: forums.bukkit.org/threads/admn…-functionality-677.12988/