2009-12-06 13 views
8

I programma applicazioni Windows utilizzando Java e questo crea un file ".jar" non un file ".exe". Quando un computer client senza java runtime installato apre il file ".jar", viene eseguito come archivio con winrar. Tutto quello che voglio sapere è come rilevare se java runtime è installato o meno su un computer usando il codice C# per mostrare un MessageBox che dice all'utente di installare java runtime, o lancia il file ".jar" usando il runtime java se è installato .Come rilevare se Java Runtime è installato o meno

+0

Si apre solo con WinRAR se hanno installato WinRAR :). –

risposta

4

È possibile controllare nel registro. Questo ti dirà se hai un JRE e quale versione.

Da this document:

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

dove il include i maggiori, minori e la versione patch di numeri; per esempio, 1.4.2_06

+0

Si noti che "HKEY_LOCAL_MACHINE \ Software \ JavaSoft \ Java Development Kit \ " non è possibile accedere a livello di programmazione utilizzando le funzioni RegistryKey C#. – LeeCambl

8

È possibile controllare il registro di

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

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

Una piccola applet in una pagina html che annulla un redirect ad una pagina "Si prega di installare Java".

EDIT: Questo è quasi l'unico modo veramente a prova di proiettile. Qualsiasi chiave di registro contenente JavaSoft è molto probabilmente solo per Sun JVM e non per altre (come IBM o BEA).

4

Avviare 'java -version' in un processo figlio. Controlla il codice di uscita e restituito l'output per 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); 
    } 
Problemi correlati