web-dev-qa-db-ja.com

javaw.exeがインストールされている場所を見つける方法

ですから、私が取り組んでいるプロジェクトでは、javaw.exeはユーザーのマシン上にあります。 どうすればいいですか?ユーザーがWindowsマシンにいると仮定します

使用した方法は、英語版のWindowsのみに制限されています。
OSがインストールされている場所を探し、Program Filesディレクトリ、Javajdkディレクトリ、binjavaw.exe。これは英語版以外のWindowsでは機能しないことを知っています。

これを行うには、人間の言語に依存しない方法は何ですか?

7
Little Child

完全を期すために、(Windows PC上で)javaw.exeそれがnot foundの場合:(まだReimeusの提案があなたの最初の試みであるべきです。)

1。
Javaは通常、その場所をレジストリの次のキーの下に保存します。
HKLM\Software\JavaSoft\Java Runtime Environement\<CurrentVersion>\JavaHome

2。
JRE/JDKの新しいバージョンでは、javaw.exe 'C:\ Windows\System32'にあるので、そこもチェックしたいかもしれません(もしあれば、パスにある可能性があります)。


もちろん、「通常の」インストール場所があります。

  • 'C:\ Program Files\Java\jre *\bin'
  • 'C:\ Program Files\Java\jdk *\bin'
  • 「C:\ Program Files(x86)\ Java\jre *\bin」
  • 'C:\ Program Files(x86)\ Java\jdk *\bin'

[注意、古いバージョンのWindows(XP、Vista(?))では、これは英語版のOSでのみ役立ちます。幸いなことに、Windowsの新しいバージョンでは、「プログラムファイル」は「表示名」(言語固有)に関係なくディレクトリを指します。]

少し前に、このコードを書いてjavaw.exe上記の場所。たぶん誰かがそれを便利だと思う:

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 :)
}
9
gkalpak

これを試して

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

使用するウィンドウで「javaw.exe」を見つけるには(バッチを使用)

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

JRE 1.6および1.7では、Windows XP and Sevenで動作します。インストールされている最新バージョンをキャッチする必要があります。

3

それは私に働いた:

    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());
2
Linielson

Cmdシェルを開き、

cd \\
dir javaw.exe /s
0
David