Как определить наличие и расположение JVM в Windows?

Я пытаюсь определить, установлен ли JVM и где он находится, чтобы я мог запустить java.exe.

все, что мне удалось найти-это HKCUSoftwareJavaSoftJava Runtime Environment<ver>. Можно ли предположить, что он установлен в %PROGRAMFILES%Javajre<ver>?

Я пытаюсь сделать это на C#, но я предполагаю, что ответ довольно языковой агностик, поэтому любой ответ приветствуется.

EDIT: Ок, у меня нашли как определить, установлена ли среда выполнения java или нет на компьютере с помощью в C#, который указал мне на HKLMSoftwareJavaSoftJava Runtime EnvironmentCurrentVersion работает с HKLMSoftwareJavaSoftJava Runtime Environment<ver>JavaHome. Мне удалось найти их вместо этого под HKLMSoftwareWow6432NodeJavaSoftJava Runtime Environment. Есть ли способ определить, какой из них я должен проверять, не пытаясь нюхать тип процессора?

4 ответов


Я собираюсь бросить свою шляпу в кольцо с кодом, который я использовал:

string javaDirectory = null;

// Native registry key - 32b on 32b or 64b on 64b
// Fall back on 32b Java on Win64 if available
RegistryKey javaKey =
    Registry.LocalMachine.OpenSubKey("SOFTWARE\Javasoft\Java Runtime Environment") ??
    Registry.LocalMachine.OpenSubKey("SOFTWARE\Wow6432Node\Javasoft\Java Runtime Environment");

if (javaKey != null)
{
    string javaVersion = javaKey.GetValue("CurrentVersion").ToString();
    try
    {
        javaDirectory = javaKey.OpenSubKey(javaVersion).GetValue("JavaHome").ToString();
    } catch(NullReferenceException)
    { /* Ignore null deref, means we can't get a directory */ }
}

if (javaDirectory == null)
{
    // deal with a lack of Java here.
}

правильно установленная JVM в системе windows будет (скорее всего ..) ответьте на команду командной оболочки:

java -version

Это не возвращает путь, но попробуйте

java -verbose -version

(по крайней мере) одна из строк будет содержать подстроку rt.jar и эта строка содержит путь "активной" виртуальной машины java.


не устанавливает JRE java.exe в c:\windows?


вы можете попытаться получить переменную среды " * JAVA_HOME*".

Это может быть полезным.

EDIT:

лучше идея смотреть por"классов" переменной.

------- start --------
C:\Documents and Settings\david>set
ALLUSERSPROFILE=...
APPDATA=...
CLASSPATH=.;C:\Archivos de programa\Java\jre6\lib\ext\QTJava.zip
CommonProgramFiles=...
...
----- end ----