Vérifiez que jdk / JRE est installé et obtenez le chemin pour la jvm.DLL


Prgrammatiquement, comment vérifier si java est insalled et obtenir le chemin de la jvm.dll ?

Author: peterh, 2014-10-07

3 answers

Java peut être installé n'importe où, et il n'y a aucune garantie que vous devriez être capable de voir où. Donc, la réponse générale à votre question, est "c'est impossible", ou que "vous avez dû exécuter une recherche récursive de fichiers pour jvm.dll sur tout votre système de fichiers".

, Mais ce n'est pas ce que vous voulez. Je pense que vous voulez obtenir un java ou une jvm "par défaut", qui sera utilisé par les outils java ou tout logiciel java.

Normalement, vous pouvez trouver cela dans la variable d'environnement $JAVA_HOME (sous Windows, %JAVA_HOME%) l'installation jdk ou jre réelle, qui doit contenir jvm.dll.

Si cela ne fonctionne pas, c'est un problème de configuration sur le système, mais peut-être que cela peut arriver. Votre deuxième choix devrait être de trouver un java.exe ou un javaw.exe quelque part dans votre chemin système ($PATH ou %PATH% sous Windows).

Il y a beaucoup d'outils, ou de logiciels java qui sortent avec leur propre instance java/jvm, en particulier oracle aime les donner. Dans leur cas, seule la solution générale travail.

 2
Author: peterh, 2014-10-07 16:29:36

Vous pouvez également écrire un programme Java qui imprime la valeur de la variable système java.home. Par exemple:

System.out.println(System.getProperty("java.home"));

Puis invoquez java.exe sur cette classe. Si Java n'est pas installé ou si vous ne pouvez pas l'exécuter, le processus ne démarrera pas... mais s'il démarre, il vous indiquera le chemin d'accès au dossier d'installation JRE, ce dont vous avez besoin pour savoir où se trouve la jvm.dll est.

Il y a toujours le problème de Java installé mais qui n'est pas sur votre CHEMIN. Dans ce cas, je le ferais signalez simplement que Java n'a pas pu être trouvé et demandez à l'utilisateur une entrée supplémentaire.

 1
Author: Mike Laren, 2014-10-07 16:34:06

Ceci est un extrait de comment je l'ai fait, l'emplacement de la jvm dll seront stockées dans runtimeLib.

char version[255];
char runtimeLib[255];
DWORD BufferSize = 8192;
string javaKey = "SOFTWARE\\JavaSoft\\Java Runtime Environment";
if(RegGetValue(HKEY_LOCAL_MACHINE, javaKey.c_str(), "CurrentVersion", RRF_RT_ANY, NULL, (PVOID)&version, &BufferSize) != ERROR_SUCCESS)
    //jre not found

javaKey += "\\";
javaKey += version;
BufferSize = 8192;

if(RegGetValue(HKEY_LOCAL_MACHINE, javaKey.c_str(), "RuntimeLib", RRF_RT_ANY, NULL, (PVOID)&runtimeLib, &BufferSize) != ERROR_SUCCESS)
    //jvm.dll not found
 1
Author: Red Alert, 2014-10-07 18:28:45