web-dev-qa-db-fra.com

Comment trouver où javaw.exe est installé?

Donc, pour un projet sur lequel je travaille, je dois savoir où se trouve un javaw.exe sur la machine d'un utilisateur. Comment je fais ça? En supposant que cet utilisateur est sur une machine Windows 

La méthode que j'ai utilisée est limitée aux versions anglaises de Windows.
J'ai cherché l'emplacement du système d'exploitation, localisez le répertoire Program Files, localisez les répertoires Java, jdk, bin, puis javaw.exe Je sais que cela ne fonctionnera pas sur les versions non anglaises de Windows. 

Quelle est la manière indépendante du langage humain de faire cela?

6
Little Child

Par souci d’exhaustivité, permettez-moi de mentionner qu’il existe des endroits (sur un PC Windows) où rechercher javaw.exe au cas où il serait non trouvé dans le chemin: (La suggestion de Reimeus devrait être votre première tentative.)

1.
Java stocke généralement son emplacement dans la base de registres sous la clé suivante:
HKLM\Software\JavaSoft\Java Runtime Environement\<CurrentVersion>\JavaHome

2.
Les versions les plus récentes de JRE/JDK, semblent également placer une copie de javaw.exe dans 'C:\Windows\System32', il est donc préférable de vérifier ici (bien qu'il y ait des chances qu'il soit là, s'il est là). dans le chemin aussi).

3.
Bien sûr, il y a les emplacements d'installation "habituels": 

  • 'C:\Program Files\Java\jre *\bin' 
  • 'C:\Program Files\Java\jdk *\bin' 
  • 'C:\Fichiers de programme (x86)\Java\jre *\bin' 
  • 'C:\Fichiers de programme (x86)\Java\jdk *\bin' 

[Notez que pour les anciennes versions de Windows (XP, Vista (?)), Cela n’aidera que sur les versions anglaises du système d’exploitation. Heureusement, dans les versions ultérieures de Windows, "Program Files" désignera le répertoire, quel que soit son "nom d'affichage" (spécifique à la langue).]

Il y a quelque temps, j'ai écrit ce code pour vérifier javaw.exe dans les emplacements susmentionnés. Peut-être que quelqu'un trouve cela utile:

static protected String findJavaw() {
    Path pathToJavaw = null;
    Path temp;

    /* Check in Registry: HKLM\Software\JavaSoft\Java Runtime Environement\<CurrentVersion>\JavaHome */
    String keyNode = "HKLM\\Software\\JavaSoft\\Java Runtime Environment";
    List<String> output = new ArrayList<>();
    executeCommand(new String[] {"REG", "QUERY", "\"" + keyNode + "\"", 
                                 "/v", "CurrentVersion"}, 
                   output);
    Pattern pattern = Pattern.compile("\\s*CurrentVersion\\s+\\S+\\s+(.*)$");
    for (String line : output) {
        Matcher matcher = pattern.matcher(line);
        if (matcher.find()) {
            keyNode += "\\" + matcher.group(1);
            List<String> output2 = new ArrayList<>();
            executeCommand(
                    new String[] {"REG", "QUERY", "\"" + keyNode + "\"", 
                                  "/v", "JavaHome"}, 
                    output2);
            Pattern pattern2 
                    = Pattern.compile("\\s*JavaHome\\s+\\S+\\s+(.*)$");
            for (String line2 : output2) {
                Matcher matcher2 = pattern2.matcher(line2);
                if (matcher2.find()) {
                    pathToJavaw = Paths.get(matcher2.group(1), "bin", 
                                            "javaw.exe");
                    break;
                }
            }
            break;
        }
    }
    try {
        if (Files.exists(pathToJavaw)) {
            return pathToJavaw.toString();
        }
    } catch (Exception ignored) {}

    /* Check in 'C:\Windows\System32' */
    pathToJavaw = Paths.get("C:\\Windows\\System32\\javaw.exe");
    try {
        if (Files.exists(pathToJavaw)) {
            return pathToJavaw.toString();
        }
    } catch (Exception ignored) {}

    /* Check in 'C:\Program Files\Java\jre*' */
    pathToJavaw = null;
    temp = Paths.get("C:\\Program Files\\Java");
    if (Files.exists(temp)) {
        try (DirectoryStream<Path> dirStream 
                = Files.newDirectoryStream(temp, "jre*")) {
            for (Path path : dirStream) {
                temp = Paths.get(path.toString(), "bin", "javaw.exe");
                if (Files.exists(temp)) {
                    pathToJavaw = temp;
                    // Don't "break", in order to find the latest JRE version
                }                    
            }
            if (pathToJavaw != null) {
                return pathToJavaw.toString();
            }
        } catch (Exception ignored) {}
    }

    /* Check in 'C:\Program Files (x86)\Java\jre*' */
    pathToJavaw = null;
    temp = Paths.get("C:\\Program Files (x86)\\Java");
    if (Files.exists(temp)) {
        try (DirectoryStream<Path> dirStream 
                = Files.newDirectoryStream(temp, "jre*")) {
            for (Path path : dirStream) {
                temp = Paths.get(path.toString(), "bin", "javaw.exe");
                if (Files.exists(temp)) {
                    pathToJavaw = temp;
                    // Don't "break", in order to find the latest JRE version
                }                    
            }
            if (pathToJavaw != null) {
                return pathToJavaw.toString();
            }
        } catch (Exception ignored) {}
    }

    /* Check in 'C:\Program Files\Java\jdk*' */
    pathToJavaw = null;
    temp = Paths.get("C:\\Program Files\\Java");
    if (Files.exists(temp)) {
        try (DirectoryStream<Path> dirStream 
                = Files.newDirectoryStream(temp, "jdk*")) {
            for (Path path : dirStream) {
                temp = Paths.get(path.toString(), "jre", "bin", "javaw.exe");
                if (Files.exists(temp)) {
                    pathToJavaw = temp;
                    // Don't "break", in order to find the latest JDK version
                }                    
            }
            if (pathToJavaw != null) {
                return pathToJavaw.toString();
            }
        } catch (Exception ignored) {}
    }

    /* Check in 'C:\Program Files (x86)\Java\jdk*' */
    pathToJavaw = null;
    temp = Paths.get("C:\\Program Files (x86)\\Java");
    if (Files.exists(temp)) {
        try (DirectoryStream<Path> dirStream 
                = Files.newDirectoryStream(temp, "jdk*")) {
            for (Path path : dirStream) {
                temp = Paths.get(path.toString(), "jre", "bin", "javaw.exe");
                if (Files.exists(temp)) {
                    pathToJavaw = temp;
                    // Don't "break", in order to find the latest JDK version
                }                    
            }
            if (pathToJavaw != null) {
                return pathToJavaw.toString();
            }
        } catch (Exception ignored) {}
    }

    return "javaw.exe";   // Let's just hope it is in the path :)
}
8
gkalpak

Essaye ça

for %i in (javaw.exe) do @echo. %~$PATH:i
3
Reimeus

Pour trouver "javaw.exe" dans Windows j'utiliserais (en utilisant batch)

for /f tokens^=2^ delims^=^" %%i in ('reg query HKEY_CLASSES_ROOT\jarfile\Shell\open\command /ve') do set JAVAW_PATH=%%i

Cela devrait fonctionner sous Windows XP et Seven, pour JRE 1.6 et 1.7. Devrait attraper la dernière version installée.

3
Federico Destefanis

Cela a fonctionné pour moi:

    String javaHome = System.getProperty("Java.home");
    File f = new File(javaHome);
    f = new File(f, "bin");
    f = new File(f, "javaw.exe"); //or f = new File(f, "javaws.exe"); //work too
    System.out.println(f + "    exists: " + f.exists());
1
Linielson

Ouvrez un cmd Shell,

cd \\
dir javaw.exe /s
0
David