Verifique se o jdk / JRE está instalado e obtenha a localização do jvm.dll

Prgrammaticamente, como verificar se o java está bloqueado e obter o caminho do jvm.dll ?

Author: peterh, 2014-10-07

3 answers

Java pode ser instalado em qualquer lugar, e não há nenhuma garantia de que você deve ser capaz de ver, onde. Então, a resposta geral à sua pergunta, é "é impossível" , ou que "você teve que executar uma busca de arquivo recursivo para jvm.dll em todo o seu sistema de arquivos".

Mas isto não é o que tu queres. Eu acho que você quer obter um java "padrão" ou jvm, que será usado por ferramentas java ou qualquer software java.

Normalmente pode-se encontrar isso no ambiente $JAVA_HOME variável (no windows, %JAVA_HOME%) a instalação actual do jdk ou do jre, que deverá conter jvm.dll.

Se não funcionar, é um problema de configuração no sistema, mas talvez possa acontecer. A sua segunda escolha deve ser encontrar um java.exe ou um javaw.exe algures no seu caminho do sistema ($PATH ou %PATH% nas janelas).

Há um monte de ferramentas, ou softwares java que estão saindo com sua própria instância java/jvm, especialmente oracle gosta de distribuí-los. No seu caso, apenas a solução geral obra.

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

Você também pode escrever um programa Java que imprime o valor da variável do sistema java.home. Por exemplo:

System.out.println(System.getProperty("java.home"));
Então invoque java.exe nesta classe. Se Java não está instalado ou você não pode executá-lo, então o processo não vai começar... mas se ele começar, então ele vai lhe dizer o caminho para a pasta de instalação JRE, que é o que você precisa para descobrir onde o jvm.é o dll. Ainda há o problema de Java ser instalado, mas não estar no seu caminho. Nesse caso, eu ... seria apenas informar que Java não poderia ser encontrado e pedir ao Usuário para entrada adicional.
 1
Author: Mike Laren, 2014-10-07 16:34:06

Este é um trecho de como o fiz, a localização do JVM dll será armazenada em 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