Come trovare dove javaw.exe è installato?


Quindi, per un progetto su cui sto lavorando, ho bisogno di scoprire dove si trova un javaw.exe sulla macchina di un utente. Come faccio? Supponendo che l'utente sia sulla macchina Windows

Il metodo che ho usato è limitato solo alle versioni inglesi di Windows.
Ho cercato dove è installato il sistema operativo, individuare la directory Program Files, individuare Java, jdk directory, bin, quindi javaw.exe. So che questo non funzionerà su versioni non inglesi di Windows.

Qual è il modo indipendente dal linguaggio umano per farlo ?

Author: Little Child, 2013-07-11

5 answers

Per completezza, permettetemi di menzionare che ci sono alcuni posti (su un PC Windows) per cercare javaw.exe nel caso in cui sia non trovato nel percorso: (Ancora il suggerimento di Reimeus dovrebbe essere il tuo primo tentativo.)

1.
Java di solito memorizza la sua posizione nel Registro, sotto la seguente chiave:
HKLM\Software\JavaSoft\Java Runtime Environement\<CurrentVersion>\JavaHome

2.
Le versioni più recenti di JRE / JDK, sembrano anche inserire una copia di javaw.exe in 'C:\Windows\System32', quindi si potrebbe voler controllare anche lì (anche se le probabilità sono, se è lì, sarà trovato nel percorso pure).

3.
Naturalmente ci sono le" solite " posizioni di installazione:

  • 'C:\Program File \ Java \ jre* \ bin'
  • 'C:\Program File \ Java \ jdk* \ bin'
  • 'C:\Program File(x86) \ Java \ jre * \ bin'
  • 'C:\Program File(x86) \ Java \ jdk * \ bin'

[Nota, che per le versioni precedenti di Windows (XP, Vista(?)), questo aiuterà solo sulle versioni inglesi del sistema operativo. Fortunatamente, nella versione successiva di Windows "Programmi" punterà alla directory indipendentemente dal suo "nome visualizzato" (che è specifico per la lingua).]

Un po ' di tempo fa, ho scritto questo pezzo di codice per verificare javaw.exe nei luoghi di cui sopra. Forse qualcuno lo trova 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

Prova questo

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

Per trovare " javaw.exe " in Windows vorrei usare (usando batch)

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

Dovrebbe funzionare in Windows XP e Seven, per JRE 1.6 e 1.7. Dovrebbe prendere l'ultima versione installata.

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

Ha funzionato per me:

    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

Aprire una shell cmd,

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