Comment trouver où javaw.exe est-il installé?


Ainsi, pour un projet sur lequel je travail, j'ai besoin de savoir où javaw.exe est situé sur l'ordinateur de l'utilisateur. Comment faire? en Supposant que l'utilisateur est sur la machine Windows

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

Qu'est-ce que le manière indépendante du langage humain de le faire ?

Author: Little Child, 2013-07-11

5 answers

Par souci d'exhaustivité, permettez - moi de mentionner qu'il existe des endroits (sur un PC Windows) à rechercher javaw.exe au cas où il serait introuvable{[7] } dans le chemin: (Toujours la suggestion de Reimeus devrait être votre première tentative.)

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

2.
Les versions plus récentes de JRE / JDK semblent également placer une copie de javaw.exe dans 'C:\Windows\System32', donc on pourrait vouloir vérifier là aussi (bien que les chances sont, si il est là, il sera trouvé dans le chemin).

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

  • 'C:\Program Fichiers \ Java \ jre * \ bin'
  • 'C:\Program Les fichiers \ Java \ jdk* \ bin'
  • 'C:\Program Les fichiers (x86)\Java \ jre* \ bin'
  • 'C:\Program Je n'ai pas besoin de ça.]}

[Notez que pour les anciennes versions de Windows (XP, Vista(?)), cela ne vous aidera que sur les versions anglaises du système d'exploitation. Heureusement, sur la version ultérieure de Windows, " Program Files "pointera vers le répertoire quel que soit son" nom d'affichage " (qui est spécifique à la langue).]

Il y a quelque temps, j'ai écrit ce morceau de code pour vérifier javaw.exe aux endroits susmentionnés. Peut-être que quelqu'un le trouve 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
Author: gkalpak, 2014-07-14 12:59:47

Essayez ceci

for %i in (javaw.exe) do @echo. %~$PATH:i
 3
Author: Reimeus, 2013-07-11 19:50:07

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

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

 3
Author: Federico Destefanis, 2014-01-16 17:09:17

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
Author: Linielson, 2016-07-20 14:44:33

Ouvrir un shell cmd,

cd \\
dir javaw.exe /s
 0
Author: David, 2017-08-22 18:51:33