如何检测是否安装了Java运行时

我使用Java编写Windows应用程序,这会构建一个“.jar”文件,而不是“.exe”文件。 当没有安装Java运行时的客户端计算机打开“.jar”文件时,它将作为带有winrar的存档运行。 我想知道的是如何在使用c#代码的计算机上检测是否安装了java运行时,以显示MessageBox告诉用户安装java运行时,或者如果安装了java运行库则使用java运行时启动“.jar”文件。

您可以检查注册表

RegistryKey rk = Registry.LocalMachine; RegistryKey subKey = rk.OpenSubKey("SOFTWARE\\JavaSoft\\Java Runtime Environment"); string currentVerion = subKey.GetValue("CurrentVersion").ToString(); 

在子进程中启动’java -version’。 检查exitcode并返回versioninfo的输出

  List output = new List(); 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); } 

你可以登记注册表。 这将告诉您是否有JRE以及哪个版本

从这份文件 :

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

其中包括主要版本,次要版本和补丁版本号; 例如,1.4.2_06

html页面中的一个小applet取消重定向到“Please install Java”页面。

编辑:这几乎是唯一真正防弹的方式。 包含JavaSoft的任何注册表项很可能仅适用于Sun JVM,而不适用于任何其他(如IBM或BEA)。