2011-01-25 16 views
8

Estoy tratando de detectar si hay una JVM instalada y dónde está ubicada para poder ejecutar java.exe.¿Cómo detectar presencia y ubicación de JVM en Windows?

Todo lo que he logrado encontrar es HKCU\Software\JavaSoft\Java Runtime Environment\<ver>. ¿Es seguro asumir que está instalado en %PROGRAMFILES%\Java\jre<ver>?

Estoy tratando de hacer esto en C#, pero supongo que la respuesta es bastante independiente del idioma, por lo que cualquier respuesta es apreciada.

EDIT: Ok tonta de mí, he encontrado que me How to detect whether java runtime is installed or not on a computer using c# señaló HKLM\Software\JavaSoft\Java Runtime Environment\CurrentVersion que trabaja con HKLM\Software\JavaSoft\Java Runtime Environment\<ver>\JavaHome. Me las arreglé para encontrar estos en su lugar debajo de HKLM\Software\Wow6432Node\JavaSoft\Java Runtime Environment. ¿Hay alguna manera de detectar cuál de estos debo verificar sin intentar olfatear el tipo de CPU?

+0

¿La entrada del registro contiene todas las versiones de Java? Debido a que algunas aplicaciones tienen versiones anteriores de JRE incluidas con ellas y pueden sobrescribir sus entradas de registro anteriores, lo cual es un verdadero problema. – biziclop

+0

@biziclop Contiene todas las versiones una junto a la otra con la tecla CurrentVersion descrita anteriormente que apunta al valor predeterminado JRE –

+0

. Es bueno saberlo, gracias. Mi observación sigue en pie, sin embargo, no confíes ciegamente en la versión actual. :) – biziclop

Respuesta

4

voy a tirar mi sombrero en el anillo con el código he terminado usando:

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. 
} 
2

Una JVM correctamente instalado en un sistema Windows será (lo más probable ..) responder al comando shell de comandos:

java -version 

Esto no devuelve el camino, pero trate

java -verbose -version 

(Al menos) una de las líneas contendrá la subcadena rt.jar y esta línea contiene la ruta de la máquina virtual java "activa".

+0

O eso, o se debe establecer la entrada de registro para jarras. Hay una función WinAPI para obtener asociaciones de archivos, pero me olvidé de eso. – Christian

+0

En mi pc de desarrollo al menos, esto no es verdad. 'java' no está registrado en' PATH'. En general, creo que confiar en 'PATH' en Windows es una mala idea, simplemente porque muchas aplicaciones no se preocupan por eso. –

+0

Las asociaciones de archivos de Christian tampoco son confiables. Algunos administradores de archivos sobrescriben la asociación jar. –

-1

Puede intentar obtener la variable de entorno "* JAVA_HOME *".

Podría ser útil.

EDIT:

idea mejor aspecto por "CLASSPATH" variable.

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

Desafortunadamente no se configuró correctamente en mi PC dev. Definitivamente vale la pena un primer intento de disparo. ¿Puedes incluir un resultado de ejemplo para mi beneficio, por favor? –

+0

Estoy mirando las variables de entorno de una PC con Java JRE recién instalado. No he encontrado el varialbe "JAVA_HOME" (mi error, lo siento) pero si lo que se conoce como "CLASSPATH" puede ser útil. – Taber

0

Qué instala el JRE no un java.exe en c: \ windows ?

+0

No funcionó en mi PC ni en ningún otro lugar de PATH. (win7 64) –

+1

Esto simplemente me impulsó a hacer una búsqueda en mi 'C: \', lo encontré en 'C: \ Windows \ SysWOW64'. Debe ser una idea análoga a 'HKLM \ Software \ Wow6432Node'. OMI, parece que la MS dañó seriamente la compatibilidad x86 ... –

+0

@MatthewScharley Ah, gracias, veamos si finalmente puedo ejecutar eclipse. –

Cuestiones relacionadas