Soll ich was selber machen oder es doch lieber bleiben lassen?
-
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.