Batch Datei startet nicht Aufgrund "Pfad Fehlern"

  • VB.NET
  • .NET (FX) 4.0

Es gibt 101 Antworten in diesem Thema. Der letzte Beitrag () ist von Gangsterkrafter.

    Batch Datei startet nicht Aufgrund "Pfad Fehlern"

    Hey, Dies ist Mein Erster Foren eintrag :)
    Zu aller Erst Sry Falsch dieser Bereich der Falsche fuer dieses Problem ist Jedoch bin ich Halt neu.
    evtl. Koennte Jemand mir Einen Link geben wo Die Sortierung des Forums Aufgelistet ist.

    Zu Meinem Problem :
    Ich versuche Einen "Minecraft Server Launcher" zu Programmieren Meine Schritte sind anfangs ganz einfach,
    Der Ordner "Minecraft Server Launcher" wird in "C:\Users\USER\AppData\Roaming\" Erstellt Also "Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)" Welcher bei mir Als variable "myLocalAppDataFolder" Gespeichert ist

    Im Ordner wird noch ein ordner Namens "Server" erstellt.
    Eine Jar Datei von Bukkit(Server Software) wird von Den Programm Ressourcen In den "Server" Ordner Kopiert
    Dann wird Im Selben Ordner eine " runserver.bat " erstellt und mit Folgenem Text Beschrieben:

    VB.NET-Quellcode

    1. File.WriteAllText(myLocalAppDataFolder + "\Minecraft Server Launcher\Server\runserver.bat", "java -version" & Environment.NewLine & "java -Xmx1G -jar craftbukkit.jar" & Environment.NewLine & "pause")
    2. Also So wuerde es In der Datei Aussehen (Mit Zeilen):
    3. java -version
    4. java -Xmx1G -jar craftbukkit.jar
    5. pause


    Nur, wenn ich Nun Per Button Den Prozess in "myLocalAppDataFolder + "\Minecraft Server Launcher\Server\runserver.bat" Per "Process.Start("") Starten will dann Kommt dieser Fehler(! Im CMD Fenster nicht im programm !) welcher Entsteht aufgrund der Argumente in der .bat Datei, Welche Aber Richtig sind denn Wenn man Selbst drauf Klickt funktioniert alles!

    Quellcode

    1. C:\Users\USER\Desktop\Minecraft Client and Server Launcher\Server Launcher\Minecraft Server Launcher\Minecraft Server Launcher\bin\Debug>java -version
    2. java version "1.8.0_45"
    3. Java(TM) SE Runtime Environment (build 1.8.0_45-b15)
    4. Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
    5. C:\Users\USER\Desktop\Minecraft Client and Server Launcher\Server Launcher\Minecraft Server Launcher\Minecraft Server Launcher\bin\Debug>java -Xmx1G -jar craftbukkit.jar
    6. Error: Unable to access jarfile craftbukkit.jar
    7. C:\Users\USER\Desktop\Minecraft Client and Server Launcher\Server Launcher\Minecraft Server Launcher\Minecraft Server Launcher\bin\Debug>pause
    :

    Die Frage ist, WARUM Nutzt Er auf ein mal den Pfad C:\Users\USER\Desktop\Minecraft Client and Server Launcher\Server Launcher\Minecraft Server Launcher\Minecraft Server Launcher\bin\Debug>java -Xmx1G -jar craftbukkit.jar , Welcher 1. Garnicht Existiert und 2. eigentlich "C:\Users\USER\AppData\Roaming\Minecraft Server Launcher\Server\runserver.bat" sein sollte! (Diese Frage Stelle ich mir Fuer Alle 3 Argumente)

    Evtl. Waere es Auch noch Cool mir Zu erklaeren, Wie man Das CMD Fenster versteckt und den Text des Fensters in einer RichTextbox Anzeigen Koennte.

    Ich Bedanke mich Schonmal Fuer Jede Hilfe jeglicher Art!
    - MFG Gangsterkrafter
    Begeisterter BF4 Spieler :D
    HAT SICH ERLEDIGT!

    An Alle die Auch das Problem Haben oder Hier in der Zukunft Schauen :

    Entweder : Visual Basic 2010 - Batch Datei bearbeiten

    Oder:

    VB.NET-Quellcode

    1. Dim meinPfad = "PFADEINS\Server" 'Wichtig ist Dass am Ende Bei Server KEIN \ ist!
    2. Dim meineDatei = IO.Path.Combine(meinPfad, "DATEINAME") 'Dateiname wird nicht namen Der Datei esetzt + endung also zb .exe
    3. Dim pr As New Process
    4. pr.StartInfo.FileName = meineDatei
    5. 'pr.StartInfo.Arguments = "bla" 'Kann Ignoriert werden
    6. pr.StartInfo.WorkingDirectory = meinPfad
    7. pr.Start()

    Begeisterter BF4 Spieler :D
    Hi, ich habe auch mal son ding programmiert, vielleicht kannst du dir ja was abschauen ;) github.com/Anapher/Minecraft-Server-Launcher
    Mfg
    Vincent

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

    Ja, klar. Du erstellst einen Process und dann hast du ein Event OutputDataReceived. Das wird jedes mal aufgerufen, wenn eine neue Zeile reingeschrieben wird. Beachte aber, dass du das ganze richtig einstellen musst, damit es umgeleitet wird. Hier mal ein Auszug aus meinem Projekt:

    VB.NET-Quellcode

    1. p = New Process()
    2. With p.StartInfo
    3. Dim javapath As String = Helper.GetjavaPath
    4. If String.IsNullOrEmpty(javapath) Then
    5. If Not String.IsNullOrEmpty(LauncherSettings.JavaPath) AndAlso File.Exists(LauncherSettings.JavaPath) Then
    6. javapath = LauncherSettings.JavaPath
    7. Else
    8. javapath = _GetJavaPath.Invoke()
    9. If String.IsNullOrEmpty(javapath) Then Return False
    10. LauncherSettings.JavaPath = javapath
    11. End If
    12. End If
    13. .FileName = javapath
    14. .Arguments = String.Format("-Xmx{0}M -Xms{0}M -jar {1} -nojline", LauncherSettings.Ram.Ram, Paths.GetPaths.MinecraftServerFileName)
    15. .RedirectStandardError = True
    16. .RedirectStandardInput = True
    17. .RedirectStandardOutput = True
    18. .CreateNoWindow = True
    19. .UseShellExecute = False
    20. End With
    21. p.EnableRaisingEvents = True
    22. p.Start()
    23. p.BeginErrorReadLine()
    24. p.BeginOutputReadLine()
    25. CommandWriter = p.StandardInput


    Einen Befehl schreibst du dann mit CommandWriter.WriteLine (CommandWriter ist ein StreamWriter).
    Mfg
    Vincent

    Das Ganze varriert Je nach dem ob Der Programm Ordner "Minecraft Server Launcher\Server" in C:\Users\USER\AppData\Roaming\ Existiert es ist Im prinzip ein Switch, wenn Der Ordner Existiert wird der "Installieren" Button versteckt und der Starten Button Angezeigt, das ganze auch Anders Herum:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Try
    3. If Directory.Exists(myLocalAppDataFolder + "\Minecraft Server Launcher\Server") Then
    4. ServerStart_btn.Show()
    5. ServerInstallieren_btn.Hide()
    6. Else
    7. ServerStart_btn.Hide()
    8. ServerInstallieren_btn.Show()
    9. End If
    10. Catch ex As Exception
    11. MsgBox(ex.Message)
    12. End Try
    13. End Sub


    Nun, Gehen wir mal Davon aus dass Der Ordner Existiert und der Start button Angezeigt wird , Dort Steht If File.Exists(myLocalAppDataFolder + "\Minecraft Server Launcher\Server\craftbukkit.jar") weil Beim Installieren die craftbukkit.jar In den Ordner Kopiert wird (nur falls du nicht wusstest WARUM craftbukkit.jar):

    VB.NET-Quellcode

    1. Private Sub ServerStart_btn_Click(sender As Object, e As EventArgs) Handles ServerStart_btn.Click
    2. If File.Exists(myLocalAppDataFolder + "\Minecraft Server Launcher\Server\craftbukkit.jar") Then
    3. Try
    4. Dim meinPfad = myLocalAppDataFolder & "\Minecraft Server Launcher\Server"
    5. Dim meineDatei = IO.Path.Combine(meinPfad, "runserver.bat")
    6. Dim pr As New Process
    7. pr.StartInfo.FileName = meineDatei
    8. 'pr.StartInfo.Arguments = "bla"
    9. pr.StartInfo.WorkingDirectory = meinPfad
    10. pr.Start()
    11. MsgBox("Server started.")
    12. Catch ex As Exception
    13. MsgBox(ex.Message)
    14. End Try
    15. Else
    16. MsgBox("Error: Couldn't Start the Server!", MsgBoxStyle.Critical, "E R R O R")
    17. End If
    18. End Sub

    Hier Sieht man Nochmal einen Screenshot:

    Begeisterter BF4 Spieler :D
    Das mag jetzt OT sein, aber selbst am Handy übertrifft meine Rechtschreibung die deine um den Faktor 1000. ganz ehrlich, ich habe Schwierigkeiten deinen Text zu lesen.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Okay, das sind die Informationen, die wir brauchen ;)

    Zunächst einmal ein paar allgemeine Tipps für deinen Code:
    Du solltest statt ​MsgBox() ​MessageBox.Show() nehmen. Sieht gleich aus, aber MsgBox ist veraltet und sollte nicht mehr benutzt werden (Siehe Böses aus VB6/VB2003 - und die richtigen VB.NET-Alternativen )

    VB.NET-Quellcode

    1. ​Dim meinPfad = myLocalAppDataFolder & "\Minecraft Server Launcher\Server"

    Hier kann eine Menge schief gehen, z. B. was ist, wenn ​myLocalAppDataFolder mit einem \ aufhört? Da gibt es eine einfache und sichere Methode, heißt Path.Combine():

    VB.NET-Quellcode

    1. Dim meinPfad = Path.Combine(myLocalAppDataFolder, "Minecraft Server Launcher\Server")

    Die Methode fügt automatisch fehlende Backslahs hinzu.

    Sonst sieht dein Code ganz gut aus, also kommen wir zu deiner Frage:

    Die Variable ​pr enthält deine Process-Instanz. Jetzt musst du eigentlich nur noch den Code aus meiner Antwort übernehmen. Ich habe die Variable p genannt, was aber kein Problem ist. Du musst nur das übernehmen, was du noch nicht hast.
    Mfg
    Vincent

    Erstmal Vielen Dank, jedoch :
    1. Ich Kapiere Nicht wo ich Deinen Code Hinpacken mus bzw. Ist bei deinem Launcher der CMD code Im programm also Ohne .bat datei oder auch mit .bat datei
    Also soll ich den Code zb. in Form.Load packen?

    Und
    2. Es Werden Folgende wörter/Buchstaben als Fehler Makiert:
    CommandWriter
    p
    LauncherSettings
    Return False
    _GetJavaPath
    Helper
    Paths

    vlt. Koenntest du mir Mal da zu Schreiben wo ich diesem Code bei dir im GitHub projekt finden kann damit ich sehe wo du es verwendest also in welchem Sub :)
    Begeisterter BF4 Spieler :D
    Hi,
    bitte versuch mal, den Code zu verstehen. Du brauchst keine bat Datei. Das ist einfach nur unnötig und verkompliziert die Sache. Hier findest du die Codestelle in der Repositry.

    p ist der Process
    CommandWriter ist der StreamWriter, über den du dann Befehle absenden kannst
    Dieses ganze Java-Zeugs brauchst du nicht, du hast den Pfad ja schon

    Bitte nicht einfach so den Code kopieren, sondern verstehen, was wo passiert und dann das übernehmen, was neu ist.
    Mfg
    Vincent

    Jetzt Sollte es Funktionieren mit diesem link: http://www.mediafire.com/download/507f39d2d4d2fcw/Minecraft_Server_Launcher.rar <- Selbst Entfernt Aufgrund Foren Regeln

    Dateianhang Kann ich nicht machen Weil die Mappe mehr als 20mb hat, Schade eig.
    Begeisterter BF4 Spieler :D

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