Trouver Java CurrentVersion dans le registre Windows 7


Je prends en charge une ancienne application cliente Java qui fonctionne correctement sur Windows XP mais pas Windows 7 32 bits. Le problème se trouve dans le fichier BAT utilisé pour lancer l'application. Le fichier BAT contient du code qui interroge le registre pour la version actuelle de Java, puis utilise cette valeur pour déterminer le chemin de cette version de Java sur l'ordinateur de l'utilisateur. Ceci est nécessaire pour inclure rt.jar sur le CHEMIN de classe lorsque l'application cliente Java est lancée. Le code suivant fonctionne bien sur Windows XP, mais sur Windows 7, il renvoie:

"HKLM\SOFTWARE\JavaSoft\Java Runtime Environment"\CurrentVersion introuvable.

:find_java
setlocal ENABLEEXTENSIONS
set KEY_NAME="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment"
set VALUE_NAME=CurrentVersion

::
:: get the current version
::
FOR /F "usebackq skip=4 tokens=3" %%A IN (`REG QUERY "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment" /v CurrentVersion 2^>nul`) DO (
    set ValueValue=%%A
)

if defined ValueValue (

    @echo the current Java runtime is  %ValueValue%
) else (
    @echo %KEY_NAME%\%VALUE_NAME% not found.
    goto return
)

set JAVA_CURRENT="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\%ValueValue%"
set JAVA_HOME=JavaHome

::
:: get the javahome
::
FOR /F "usebackq skip=4 tokens=3,4" %%A IN (`REG QUERY %JAVA_CURRENT% /v %JAVA_HOME% 2^>nul`) DO (
    set JAVA_PATH=%%A %%B
)
set JAVA_PATH=%JAVA_PATH:Program Files=Progra~1%
echo using %JAVA_PATH%
set JAVA_HOME=%JAVA_PATH%
echo.
:return
goto start

Je ne suis pas averti quand il s'agit de programmation de commande DOS complexe. Des indices sur la façon dont je peux mettre à jour ce code afin qu'il fonctionne sous Windows 7 (32 bits)?

Author: Michael Sobczak, 2014-11-13

1 answers

Peut-être que cela pourrait aider

@echo off 
    setlocal enableextensions disabledelayedexpansion

    :: possible locations under HKLM\SOFTWARE of JavaSoft registry data
    set "javaNativeVersion="
    set "java32ON64=Wow6432Node\"

    :: for variables
    ::    %%k = HKLM\SOFTWARE subkeys where to search for JavaSoft key
    ::    %%j = full path of "Java Runtime Environment" key under %%k
    ::    %%v = current java version
    ::    %%e = path to java

    set "javaDir="
    set "javaVersion="
    for %%k in ( "%javaNativeVersion%" "%java32ON64%") do if not defined javaDir (
        for %%j in (
            "HKLM\SOFTWARE\%%~kJavaSoft\Java Runtime Environment"
        ) do for /f "tokens=3" %%v in (
            'reg query "%%~j" /v "CurrentVersion" 2^>nul ^| find /i "CurrentVersion"'
        ) do for /f "tokens=2,*" %%d in (
            'reg query "%%~j\%%v" /v "JavaHome"   2^>nul ^| find /i "JavaHome"'
        ) do ( set "javaDir=%%~e" & set "javaVersion=%%v" )
    )

    if not defined javaDir (
        echo Java not found
    ) else (
        echo JAVA_HOME="%javaDir%"
        echo JAVA_VERSION="%javaVersion%"
    )

    endlocal
 4
Author: MC ND, 2014-11-13 15:14:03