Soll ich was selber machen oder es doch lieber bleiben lassen?



  • Nein das ist nicht mein Programm.
    Es ist ein Spielserver und ich möchte an diesem Punkt ansetzen weil es offensichtlich und für andere die ähnliche Server betreiben nachvollziehbar ist.



  • Du hast immer noch nicht geschrieben, was das für einen Sinn hat. Du jetzt nur den maximalen Heapspeicher er VM hoch, mehr macht das alles doch gar nicht. Der Pfad zu java sollte unter %path% eingetragen und nicht hartkodiert sein.
    Und was ist bei dem ganzen jetzt dein Part? Kannst du nicht einfach deine Batch Datei den Leuten die es brauchen zukommen lassen und ins Verzeichnis zu der jar legen lassen?



  • Du jetzt nur den maximalen Heapspeicher er VM hoch

    Auf einem privaten Rechner macht das schon mal Sinn, je nachdem was man gerade so am treiben ist.

    Der Pfad zu java sollte unter %path% eingetragen und nicht hartkodiert sein.

    Aber ich kann nicht garantieren das dies beim Benutzer der Fall ist, eigentlich reicht es auch einfach "java" zu schreiben, weiß nur nicht ob das immer funzt.
    Ja elegant ist anders aber ich muss mich halt in mein Publikum hineinversetzen. Ich versuche möglichst wenig vorauszusetzen. Wenn derjenige ein Ziparchiv bekommt und es geschafft hat das zu entpacken dann gehe ich davon aus das er auch eine Ordnerstruktur verstehen und finden kann. Dann muss ich den nicht mit Umgebungsvariablen konfrontieren. Sozusagen ein Server für Dummies.



  • Wäre es dann nicht besser Java gleich mitzuliefern?



  • Hab ich mir auch schon überlegt. Wären aber wieder 100 mb extra und wie mach ich das? Also wie gebe ich dann den Pfad ein.
    Das Problem mit dem variablen Speicher bleibt allerdings, gut eigentlich ist es nicht zu viel verlangt einen Rechtsklick auf die bat zu machen und zu bearbeiten aber ich muss sagen mein Ehrgeiz ist jetzt schon geweckt. Ich würde gerne mal ein unter Windows ausführbares Programm schreiben, welches besagtes Dialogfenster öffnet und nach Bestätigung eine Batch-Datei erstellt.
    Hat keiner einen Tipp was ich da brauche bzw wissen muss? Also nicht von Grund auf aber da gibts doch bestimmt eine bib für, vielleicht kennt sogar jemand ein Tutorial, wäre jedenfalls nice wenn mir da jemand weiter helfen könnte.



  • Minecraft, habe ich recht?



  • Richtööösch 😉



  • Naja, Batch Dateien sind keine Allerkönner und sind nicht gerade meine Freunde.

    Schreibe dir doch eine kleine Start-Applikation, welche dein Java Programm aufruft. Dei Anwendung kann beispielsweise die Anforderungen deines Programms prüfen, den korrekten Pfad zu Java suchen, ... Damit bist du flexibler als mit Batch Dateien. Und außerdem ploppt keine nervige DOS Box auf.



  • littleDuke schrieb:

    Hab ich mir auch schon überlegt. Wären aber wieder 100 mb extra und wie mach ich das?

    Ja hui die 100 MB werden auch keinem weh tun.
    Wie man das macht weiss ich nicht, ergoogel es dir halt. So schwer wird das nicht sein.
    Vermutlich mal einfach Java mit nem Commandline-Switch installieren der angibt wo die Files landen sollen.
    Danach hast du die Files in deinem Server-Verzeichnis, und das Batch-File kann die java.exe einfach über nen relativen Pfad aufrufen.

    littleDuke schrieb:

    Das Problem mit dem variablen Speicher bleibt allerdings, gut eigentlich ist es nicht zu viel verlangt einen Rechtsklick auf die bat zu machen und zu bearbeiten aber ich muss sagen mein Ehrgeiz ist jetzt schon geweckt. (...)

    Also ... wenn ich davon ausgehe dass ich nicht programmieren könnte, dann würde ich mir sicher nicht die Arbeit antun da extra nen Starter zu schreiben.
    Schreib rein 1 oder 1,5GB und gut is. Wer weniger oder mehr Speicher will muss die .bat Datei halt editieren, das werden die Leute schon hinbekommen.



  • Oder du packst ca. sowas in dein Batch-File

    @ECHO OFF
    SETLOCAL ENABLEEXTENSIONS
    
    SET __MIN_RAM_FOR_JAVA=500
    SET __MAX_RAM_FOR_JAVA=2000
    SET __DEFAULT_RAM_FOR_JAVA=1000
    
    :: Get amount of physical RAM
    FOR /f "tokens=2* delims=:" %%a in ('systeminfo ^| findstr /I /C:"Total Physical Memory"') DO SET __PHYSICAL_RAM=%%a
    
    :: Remove dots, spaces and the trailing "MB"
    SET "__PHYSICAL_RAM=%__PHYSICAL_RAM:.=%"
    SET "__PHYSICAL_RAM=%__PHYSICAL_RAM: =%"
    SET "__PHYSICAL_RAM=%__PHYSICAL_RAM:MB=%"
    
    :: Convert to number / check result
    
    IF NOT DEFINED __PHYSICAL_RAM GOTO :physical_ram_error
    
    SET "__PHYSICAL_RAM_CHECK=x%__PHYSICAL_RAM%x"
    SET "__PHYSICAL_RAM_CHECK=%__PHYSICAL_RAM_CHECK:0=%"
    SET "__PHYSICAL_RAM_CHECK=%__PHYSICAL_RAM_CHECK:1=%"
    SET "__PHYSICAL_RAM_CHECK=%__PHYSICAL_RAM_CHECK:2=%"
    SET "__PHYSICAL_RAM_CHECK=%__PHYSICAL_RAM_CHECK:3=%"
    SET "__PHYSICAL_RAM_CHECK=%__PHYSICAL_RAM_CHECK:4=%"
    SET "__PHYSICAL_RAM_CHECK=%__PHYSICAL_RAM_CHECK:5=%"
    SET "__PHYSICAL_RAM_CHECK=%__PHYSICAL_RAM_CHECK:6=%"
    SET "__PHYSICAL_RAM_CHECK=%__PHYSICAL_RAM_CHECK:7=%"
    SET "__PHYSICAL_RAM_CHECK=%__PHYSICAL_RAM_CHECK:8=%"
    SET "__PHYSICAL_RAM_CHECK=%__PHYSICAL_RAM_CHECK:9=%"
    
    IF "%__PHYSICAL_RAM_CHECK%" NEQ "xx" GOTO :physical_ram_error
    
    SET /A __PHYSICAL_RAM = %__PHYSICAL_RAM%
    IF ERRORLEVEL 1 GOTO :physical_ram_error
    
    IF %__PHYSICAL_RAM% LSS 1 GOTO :physical_ram_error
    
    GOTO :physical_ram_OK
    
    :physical_ram_error
    
        ECHO WARNING: could not determine amount of physical memory
        IF DEFINED __PHYSICAL_RAM ECHO        (The value '%__PHYSICAL_RAM%' could not be interpreted).
        ECHO Defaulting to %__DEFAULT_RAM_FOR_JAVA% MB for Java...
        ECHO.
    	SET /A __RAM_FOR_JAVA=%__DEFAULT_RAM_FOR_JAVA%
        SET __PHYSICAL_RAM=
        SET __PHYSICAL_RAM=unknown
        GOTO :have_ram_for_Java
    
    :physical_ram_OK
    
    :: Set default RAM for Java = 50% of physical RAM
    SET /A __RAM_FOR_JAVA = %__PHYSICAL_RAM% / 2
    
    :have_ram_for_Java
    
    :: Enforce configured minimum
    IF %__RAM_FOR_JAVA% LSS %__MIN_RAM_FOR_JAVA% SET /A __RAM_FOR_JAVA = %__MIN_RAM_FOR_JAVA%
    :: Enforce configured maximum
    IF %__RAM_FOR_JAVA% GTR %__MAX_RAM_FOR_JAVA% SET /A __RAM_FOR_JAVA = %__MAX_RAM_FOR_JAVA%
    
    ECHO Physical RAM: [%__PHYSICAL_RAM%]
    ECHO RAM for Java: [%__RAM_FOR_JAVA%]
    
    :: >>>>>>>>>>> Hier jave.exe mit
    ::    -Xmx%__RAM_FOR_JAVA%M -Xms%__RAM_FOR_JAVA%M
    ::             als Parameter starten <<<<<<<<<<<<<<<<<<
    


  • Schreibe dir doch eine kleine Start-Applikation, welche dein Java Programm aufruft. Dei Anwendung kann beispielsweise die Anforderungen deines Programms prüfen, den korrekten Pfad zu Java suchen, ... Damit bist du flexibler als mit Batch Dateien. Und außerdem ploppt keine nervige DOS Box auf.

    Die Anforderungen "meines Programms" ändern sich ja ständig, je nachdem wie viele Spieler erwartet werden und welche Plugins laufen. In der DOS Box gebe ich Befehle ein um den Server zu verwalten, das muss noch möglich sein. Den korrekten Pfad suchen wäre schon toll aber kann ich nicht auch eine Programm schreiben das den korrekten Pfad sucht und diesen dann in die Batch Datei bringt? Ich möchte eigentlich den von den Serverentwicklern vorgesehenen Weg beibehalten. Trotzdem, wie würde ich so eine Start-Applikation "produzieren" 😃
    Ich habe bis jetzt nur Programme geschrieben die in einer Entwicklerumgebung liefen oder auf einem Mikroprozessor aber wie sowas aussehen muss damit es als einzelne Datei unter Windows läuft... da hab ich sowas von gar keinen Plan. Also wie soll ich vorgehen? zb nach was soll ich googlen? Wäre zumindest mal ein Anfang.



  • @hustbaer
    Danke für die Hilfe aber das hilft mir gerade nicht wirklich weiter. Ich kann nicht einschätzen in wie weit der Code was taugt. Mir geht es darum die bat die ich schon habe erstellen zu lassen. Also wie anfangen?



  • Na dann halt so...

    @ECHO OFF
    SETLOCAL ENABLEEXTENSIONS
    
        :: ERRORLEVEL zurücksetzen
    CMD /C
    
    :: --------------------------------------------------------
    
        :: Änderbare Parameter
    SET __BAT_NAME=MyBatchFile.bat
    SET __MIN_RAM=256
    SET __MAX_RAM=8192
    SET __DEFAULT_RAM=1024
    
    :: --------------------------------------------------------
    
        :: Vollständigen Pfad zum zu-erzeugenden Batch-File basteln
    SET "__BAT_PATH=%~dp0.\%__BAT_NAME%"
    
    :: --------------------------------------------------------
    
        :: Beschreibung ausgeben
    ECHO Beschreibung trallala...
    
        :: Default-Wert setzen
    SET __RAM=%__DEFAULT_RAM%
    
    :: --------------------------------------------------------
    
        :: Wert vom User abfragen
    ECHO Enter amount of RAM for Server
    SET /P "__RAM= (in MB, min = %__MIN_RAM%, max = %__MAX_RAM%, default = %__RAM%): "
    
        :: Eingabefehler?
    IF ERRORLEVEL 2 GOTO :input_error
    IF NOT DEFINED __RAM GOTO :input_error
    IF "%__RAM%" EQU "" GOTO :input_error
    
    GOTO :input_OK
    
        :: Eingabefehler behandeln
    :input_error
    ECHO Eingabefehler
    EXIT /B 1
    :input_OK
    
    :: --------------------------------------------------------
    
        :: ERRORLEVEL zurücksetzen
    CMD /C
    
        :: Prüfen ob eigegebener Wert auch eine Zahl ist
    SET "__RAM_ORIG=%__RAM%"
    SET /A "__RAM_NUM = %__RAM_ORIG%"
    IF ERRORLEVEL 1 GOTO :not_a_number
    IF %__RAM_NUM% EQU 0 GOTO :not_a_number
    
    GOTO :number_OK
    
    :not_a_number
    ECHO ERROR: '%__RAM_ORIG%' is not a number!
    EXIT /B 1
    :number_OK
    
    :: --------------------------------------------------------
    
        :: Prüfen ob Zahl zu gross/zu klein ist
    IF %__RAM_NUM% GTR %__MAX_RAM% (
        ECHO ERROR: %__RAM_NUM% is greater than maximum RAM size ^(%__MAX_RAM%^).
        EXIT /B 1
    )
    IF %__RAM_NUM% LSS %__MIN_RAM% (
        ECHO ERROR: %__RAM_NUM% is less than minimum RAM size ^(%__MIN_RAM%^).
        EXIT /B 1
    )
    
    :: --------------------------------------------------------
    
        :: ERRORLEVEL zurücksetzen
    CMD /C
    
        :: Neues Batch-File erzeugen
    
    ECHO.
    ECHO Creating %__BAT_NAME% file with RAM = %__RAM% MB...
    ECHO.>"%__BAT_PATH%"
    IF ERRORLEVEL 1 (
        ECHO ERROR: could not create '%__BAT_NAME%' file.
        EXIT /B 1
    )
    
        :: Inhalt in neu erzeugtes file schreiben...
    
    ECHO.@ECHO OFF >>"%__BAT_PATH%"
    ECHO.SET BINDIR=%%~dp0 >>"%__BAT_PATH%"
    ECHO.CD /D "%%BINDIR%%" >>"%__BAT_PATH%"
    ECHO."%%ProgramFiles%%\Java\jre7\bin\java.exe" -Xmx%__RAM_NUM%M -Xms%__RAM_NUM%M -jar Dateiname.jar >>"%__BAT_PATH%"
    ECHO.PAUSE >>"%__BAT_PATH%"
    
    IF ERRORLEVEL 1 (
        ECHO ERROR: could not write to '%__BAT_NAME%' file.
        EXIT /B 1
    )
    
    ECHO.
    ECHO DONE.
    ECHO.
    


  • Oh. Super das funktioniert, danke! 🙂
    Saubere Sache, so in der Art hab ich es mir vorgestellt und mehr als ich mir hier an dieser Stelle erhofft hatte.
    Aber woher kannst du das? Ich würde das auch gerne können, wo kann ich das lernen bzw mehr darüber erfahren?



  • Doku zu Batchfiles studieren?



  • Alles klar, gefunden.



  • littleDuke schrieb:

    Aber woher kannst du das? Ich würde das auch gerne können, wo kann ich das lernen bzw mehr darüber erfahren?

    Ich kann das, weil ich öfters mal Batch-Files gebraucht habe, auch manchmal welche die halt mehr machen als nur doof ein paar Programme hintereinander zu starten.
    Und man kann sich das alles ergoogeln.


Anmelden zum Antworten