2009-12-06 13 views
8

Ich Programm Windows-Anwendungen mit Java und das erstellt eine ".jar" -Datei nicht eine ".exe" -Datei. Wenn ein Client-Computer ohne installierte Java-Laufzeitumgebung die Datei ".jar" öffnet, wird sie als Archiv mit winrar ausgeführt. Alles, was ich wissen möchte, ist, wie man erkennt, ob Java Runtime installiert ist oder nicht auf einem Computer mit C# -Code, um eine MessageBox zu zeigen, die Benutzer Java Runtime zu installieren, oder startet die ".jar" -Datei mit der Java-Laufzeit, wenn es installiert ist .Wie erkennen, ob Java-Laufzeit installiert ist oder nicht

+0

Es wird nur mit WinRAR geöffnet, wenn WinRAR installiert ist :). –

Antwort

4

Sie könnten in der Registrierung einchecken. Dies wird Ihnen sagen, wenn Sie eine JRE haben, und welche Version.

Von this document:

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

, wo die die Haupt-, Neben- und die Patch-Versionsnummern enthält; zum Beispiel können 1.4.2_06

+0

Es sollte beachtet werden, dass "HKEY_LOCAL_MACHINE \ Software \ JavaSoft \ Java-Entwicklungskit \ " programmgesteuert nicht mithilfe der C# -Funktionen von RegistryKey zugegriffen werden kann. – LeeCambl

8

Sie überprüfen Sie die Registrierung

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

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

Ein kleines Applet in einer HTML-Seite, die eine Umleitung auf eine „Bitte installieren Sie Java“ Seite abgebrochen.

EDIT: Dies ist fast der einzige wirklich kugelsichere Weg. Jeglicher Registrierungsschlüssel, der JavaSoft enthält, ist höchstwahrscheinlich nur für die Sun JVM und nicht für andere (wie IBM oder BEA).

4

Starten Sie 'Java-Version' in einem Childprocess. Exitcode überprüfen und Ausgabe für versioninfo zurückgeben

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); 
    } 
Verwandte Themen