Controlla che jdk / JRE sia installato e ottieni il percorso per jvm.DLL


Prgrammatically, come verificare se java è insalled e ottenere il percorso da jvm.dll ?

Author: peterh, 2014-10-07

3 answers

Java può essere installato ovunque, e non vi è alcuna garanzia che si dovrebbe essere in grado di vedere, dove. Quindi, la risposta generale alla tua domanda, è "è impossibile", o che "hai dovuto eseguire una ricerca di file ricorsiva per jvm.dll sull'intero filesystem".

Ma questo non è quello che vuoi. Penso che tu voglia ottenere un java o jvm "predefinito", che verrà utilizzato dagli strumenti java o da qualsiasi software java.

Normalmente è possibile trovarlo nella variabile d'ambiente $JAVA_HOME (su Windows, %JAVA_HOME%) l'installazione jdk o jre effettiva, che dovrebbe contenere jvm.dll.

Se non funziona, è un problema di configurazione sul sistema, ma forse può accadere. La seconda scelta dovrebbe essere quella di trovare un java.exe o un javaw.exe da qualche parte nel percorso del sistema ($PATH o %PATH% su Windows).

Ci sono un sacco di strumenti, o software java che stanno uscendo con la propria istanza java/jvm, in particolare oracle piace dare loro. Nel loro caso, solo la soluzione generale opera.

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

È anche possibile scrivere un programma Java che stampa il valore della variabile di sistema java.home. Ad esempio:

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

Quindi invocare java.exe su questa classe. Se Java non è installato o non è possibile eseguirlo, il processo non verrà avviato... ma se inizia, ti dirà il percorso della cartella di installazione di JRE, che è ciò di cui hai bisogno per capire dove si trova la jvm.dll è.

C'è ancora il problema di Java installato ma non sul tuo PERCORSO. In tal caso, lo farei basta segnalare che Java non è stato trovato e chiedere all'utente ulteriori input.

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

Questo è un frammento di come l'ho fatto, la posizione della dll jvm verrà memorizzata in 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