webentwicklung-frage-antwort-db.com.de

Wie finde ich heraus, wo javaw.exe installiert ist?

Für ein Projekt, an dem ich gerade arbeite, muss ich herausfinden, wo sich ein javaw.exe auf dem Computer eines Benutzers befindet. Wie mache ich das? Angenommen, der Benutzer ist auf einem Windows-Computer 

Die Methode, die ich verwendet habe, ist nur auf englische Windows-Versionen beschränkt.
Ich habe nach dem Installationsort des Betriebssystems gesucht, finde das Verzeichnis Program Files, Java, jdk, bin und dann javaw.exe. Ich weiß, dass dies bei nicht-englischen Versionen von Windows nicht funktioniert. 

Was ist der von Menschen gesprochene Weg, um dies zu tun?

6
Little Child

Der Vollständigkeit halber möchte ich erwähnen, dass es einige Stellen gibt (auf einem Windows-PC), in denen nach javaw.exe gesucht wird, falls er nicht gefunden wird im Pfad: (Der Vorschlag von Reimeus sollte jedoch der erste sein Versuch.)

1.
Java speichert seinen Speicherort normalerweise in der Registrierung unter dem folgenden Schlüssel:
HKLM\Software\JavaSoft\Java Runtime Environement\<CurrentVersion>\JavaHome

2.
Neuere Versionen von JRE/JDK scheinen auch eine Kopie von javaw.exe in 'C:\Windows\System32' zu platzieren, so dass man auch dort nachsehen möchte (obwohl die Chance besteht, wird sie gefunden auch im Pfad).

3.
Natürlich gibt es die "üblichen" Installationsorte: 

  • 'C:\Programme\Java\jre *\bin' 
  • 'C:\Programme\Java\jdk *\bin' 
  • 'C:\Programme (x86)\Java\jre *\bin' 
  • "C:\Programme (x86)\Java\jdk *\bin" 

[Beachten Sie, dass ältere Versionen von Windows (XP, Vista (?)) Nur für englische Versionen des Betriebssystems hilfreich sind. Glücklicherweise zeigt "Program Files" in späteren Versionen von Windows auf das Verzeichnis, unabhängig von seinem "Anzeigenamen" (der sprachspezifisch ist).]

Vor einiger Zeit schrieb ich diesen Code, um an den oben genannten Stellen nach javaw.exe zu suchen. Vielleicht findet es jemand nützlich:

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

Versuche dies

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

Um "javaw.exe" in Windows zu finden, würde ich verwenden (mit batch)

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

Es sollte unter Windows XP und Seven für JRE 1.6 und 1.7 funktionieren. Sollte die zuletzt installierte Version fangen.

3

Es funktionierte für mich:

    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

Eine cmd-Shell öffnen,

cd \\
dir javaw.exe /s
0
David