2009-08-27 15 views
15

Intenté buscar en Google la respuesta, pero todo lo que encontré fueron consejos sobre cómo detectar Java desde un navegador o la forma muy genérica de simplemente iniciar Java y ver si se ejecuta, lo que introduce un posible retraso en mi aplicación. (~ Dos segundos cuando se inicia la primera vez en mi máquina)¿Cómo puedo detectar el Sun/Oracle JRE instalado en Windows?

espero que haya una manera más rápida, si se aplican las siguientes restricciones:

  • Sólo JRE de Sun/Oracle o JDK
  • Sólo el 1,6 y plataformas
  • únicas ventanas superiores
  • No desde un navegador, sino de una antigua llanura Win32 ejecutable

Esta detección no está pensada para una aplicación pública, sino para uso interno solo en plataformas Windows.

¿Hay alguna ruta de registro que pueda leer o algún archivo de configuración que pueda analizar?

+0

usted ve a un retraso si el JRE * no * es instalado ? Y si está instalado, ¿no ejecutará el programa y aceptará la demora de inicio de todos modos? – finnw

+1

No de inmediato. La aplicación tiene muchas características y en el inicio se verifican todos los requisitos previos. Algunas veces el usuario ni siquiera llega a la ruta del código que requiere Java, pero aún tiene que sufrir el retraso. Los usuarios ya fruncen el ceño ante el inicio prolongado ... –

Respuesta

19
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment 
+7

o 'HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ JavaSoft \ Java Runtime Environment ' –

+0

@ParchedSquid, el OP indica" * desde un simple ejecutable antiguo de Win32 * ", que no verá el' Wow6432Node'. – finnw

+1

En mi PC, HKEY_LOCAL_MACHINE \ SOFTWARE \ JavaSoft \ Java Runtime Environment apunta a un antiguo JRE desinstalado. El único registro correcto para mí es HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ JavaSoft \ Java Runtime Environment – jornhd

4

El registro probablemente sea la ruta más fácil, suponiendo que se haya ejecutado un instalador. versiones instaladas se pueden encontrar en varias subclaves en:

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit 
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment 

Si el usuario ha configurado manualmente su entorno, se puede comprobar JAVA_HOME/caminar la variable PATH y comprobar la versión del archivo. Demo del guión WSH:

'file: whereJava.vbs 
'usage: cscript /Nologo whereJava.vbs 

'find Java 6 from registry 
Set objShell = CreateObject("WScript.Shell") 
Wscript.Echo objShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\" &_ 
        "JavaSoft\Java Runtime Environment\1.6\JavaHome") 

'check file version of java.exe 
javaHome = objShell.Environment.item("JAVA_HOME") 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Wscript.Echo objFSO.GetFileVersion(javaHome & "\bin\java.exe") 

Ver GetFileVersionInfo y compañía. Los números de la versión principal parecen coincidir con la versión de Java (5, 6). Hay una cantidad finita que puede hacer sin invocar la JVM.

1

En su lugar puede intentar ejecutar el comando "java -version" en el símbolo del sistema.

Esto puede no funcionar bien si el JRE no está instalado correctamente, sino copiado de alguna otra máquina. Una solución segura es navegar al directorio de instalación de JRE "C: \ Archivos de programa \ Java \", vaya a la carpeta bin desde el símbolo del sistema y luego ejecute "java -version". La salida será una versión de instalación y toda la información relevante que esté buscando.

+0

Eso es lo que quiero evitar, vea mi pregunta. –

1

Puede haber varios JRE y JDK instalados en una máquina con Windows, pero solo uno tendrá el conjunto de HKEY_LOCAL_MACHINE \ SOFTWARE \ JavaSoft \ Java Runtime Environment.

También puede considerar las variables de entorno "JAVA_HOME" y "Ruta", ya que influirán en las invocaciones java de la línea de comando.

5

Windows> Inicio> cmd>

C:> for %i in (java.exe) do @echo. %~$PATH:i 

Si usted tiene un JRE instalado, se muestra la ruta, por ejemplo: C:\Windows\System32\java.exe

+0

Esto es ciertamente una solución ingenua. – Machinarius

Cuestiones relacionadas