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?
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":
[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 :)
}
Essaye ça
for %i in (javaw.exe) do @echo. %~$PATH:i
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.
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());
Ouvrez un cmd Shell,
cd \\
dir javaw.exe /s