2009-12-06 7 views
8

Programo aplicaciones de Windows usando Java y esto crea un archivo ".jar" no un archivo ".exe". Cuando una computadora cliente sin tiempo de ejecución java instalado abre el archivo ".jar", se ejecuta como un archivo con winrar. Todo lo que quiero saber es cómo detectar si el tiempo de ejecución de java está instalado o no en una computadora usando el código C# para mostrarle a un usuario de MessageBox que instale java runtime, o inicia el archivo ".jar" usando java runtime si está instalado .Cómo detectar si el tiempo de ejecución de Java está instalado o no

+0

Se abre solo con WinRAR si tienen instalado WinRAR :). –

Respuesta

4

Puede verificar en el registro. Esto le dirá si tiene un JRE y cuya versión.

De this document:

HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment\<version number> 
HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Development Kit\<version number> 

donde el incluye los números mayores, menores y la versión del parche; por ejemplo, 1.4.2_06

+0

Se debe tener en cuenta que "HKEY_LOCAL_MACHINE \ Software \ JavaSoft \ Java Development Kit \ " no se puede acceder mediante programación utilizando las funciones RegistryKey C#. – LeeCambl

8

puede comprobar el registro

RegistryKey rk = Registry.LocalMachine; 
RegistryKey subKey = rk.OpenSubKey("SOFTWARE\\JavaSoft\\Java Runtime Environment"); 

string currentVerion = subKey.GetValue("CurrentVersion").ToString(); 
0

Un pequeño applet en una página HTML que anula una redirección a una página "Por favor instalar Java".

EDITAR: Esta es casi la única manera realmente a prueba de balas. Cualquier clave de registro que contenga JavaSoft es probablemente solo para Sun JVM y no para ninguna otra (como IBM o BEA).

4

Comience 'java -version' en un proceso hijo. Verifique el código de salida y la salida devuelta para versioninfo

List<String> output = new List<string>(); 
    private bool checkIfJavaIsInstalled() 
    { 
     bool ok = false; 

     Process process = new Process(); 
     try 
     { 
      process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
      process.StartInfo.CreateNoWindow = true; 
      process.StartInfo.FileName = "cmd.exe"; 
      process.StartInfo.UseShellExecute = false; 
      process.StartInfo.RedirectStandardOutput = true; 
      process.StartInfo.RedirectStandardError = true; 
      process.StartInfo.Arguments = "/c \"" + "java -version " + "\""; 

      process.OutputDataReceived += new DataReceivedEventHandler((s, e) => 
      { 
       if (e.Data != null) 
       { 
        output.Add((string) e.Data); 
       } 
      }); 
      process.ErrorDataReceived += new DataReceivedEventHandler((s, e) => 
      { 
       if (e.Data != null) 
       { 
        output.Add((String) e.Data); 
       } 
      }); 

      process.Start(); 
      process.BeginOutputReadLine(); 
      process.BeginErrorReadLine(); 

      process.WaitForExit(); 

      ok = (process.ExitCode == 0); 
     } 
     catch 
     { 
     } 

     return (ok); 
    } 
Cuestiones relacionadas