diff --git a/history.txt b/history.txt index 783e80d92..41e180e1d 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,7 @@ +2012-11-10 kytv +* eepget: Add logic to figure out the path to java.exe (java isn't always added to the system path + in Windows) (ticket #769) + 2012-11-05 zzz * Console: - Fix NPE after restart (ticket #763) diff --git a/installer/resources/eepget.bat b/installer/resources/eepget.bat index 04e94a5e9..5d829c465 100644 --- a/installer/resources/eepget.bat +++ b/installer/resources/eepget.bat @@ -1,3 +1,84 @@ @echo off + +:: +:: This should have been changed by the installer +:: set _I2PHOME=%INSTALL_PATH -java -cp "%_I2PHOME%\lib\i2p.jar" net.i2p.util.EepGet %1 %2 %3 %4 %5 + +:: In case the autodetection fails or a specific Java binary is needed, +:: uncomment the next line and set the full path to "java.exe" +:: +REM set JAVA= + +:: +:: If we find Java in the path, or a specific Java binary was set, let's use +:: it instead of figuring it out ourselves. +:: +if defined JAVA ( + goto eepget +) else ( + for %%I in (java.exe) do set JAVA=%%~$PATH:I +) +:: +:: Does "elif" exist in Windows? It doesn't seem to... +:: +if defined JAVA GOTO eepget + +:: +:: We should only end up here if Java isn't in the path +:: +setlocal ENABLEEXTENSIONS +set KEY1="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment" +set KEY2="HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment" +set VALUE_NAME=CurrentVersion + +:: +:: The key specified in the KEY1 variable should exist on 32bit windows +:: and 64bit Windows with a 64bit JRE. +:: +:: The key specified in KEY2 will be used on a 64bit Windows with a 32-bit JRE. +:: +reg query %KEY1% 2>nul && set KEY_NAME=%KEY1% || set KEY_NAME=%KEY2% + +:: +:: Get the current version from the registry +:: +FOR /F "tokens=2,*" %%A IN ('REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul') DO ( + set VersionValue=%%B +) + +:: +:: Since we didn't find the registry keys (and JAVA wasn't set in this script), +:: we'll quit. +:: +if not defined VersionValue ( + @echo Unable to find %KEY_NAME%\%VALUE_NAME% in the registry. + @echo Please edit this script and manually set the variable JAVA. + goto end +) + +set JAVA_CURRENT=%KEY_NAME%\%VersionValue% +set J_HOME=JavaHome + +:: +:: Get the Java Home +:: +FOR /F "tokens=2,*" %%A IN ('REG QUERY %JAVA_CURRENT% /v %J_HOME% 2^>nul') DO ( + set JAVA_PATH=%%B +) + +if not defined JAVA (set JAVA="%JAVA_PATH%\bin\java.exe") + +:eepget +:: +:: The binary in %JAVA% should exist, assuming it was set by us. Perhaps it +:: won't if the user specified it manually. Let's check to be sure. +:: +if not exist %JAVA% ( + echo. Could not find %JAVA%. Please ensure that the variable JAVA + echo. refers to a path that exists. + goto end +) +%JAVA% -cp "%_I2PHOME%\lib\i2p.jar" net.i2p.util.EepGet %1 %2 %3 %4 %5 + +:end