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

时间:2009-12-06 17:25:07

标签: c# java runtime

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

5 个答案:

答案 0 :(得分:10)

您可以查看注册表

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

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

答案 1 :(得分:6)

在子进程中启动'java -version'。检查exitcode并返回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);
    }

答案 2 :(得分:4)

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

来自this document

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

下面的代码会有所帮助:

public static bool IsJavaExists()
{
    try
    {
        ProcessStartInfo psi = new ProcessStartInfo();
        psi.FileName = "java.exe";
        psi.Arguments = " -version";
        psi.RedirectStandardError = true;
        psi.UseShellExecute = false;
        Process pr = Process.Start(psi);
        return true;
    }
    catch (Exception)
    {
        return false;
    }
}