2009-12-06 117 views
8

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

+0

它只在WinRAR打开,如果他们有WinRAR安装:)。 – 2010-09-20 20:37:07

回答

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

+0

应该注意,不能使用RegistryKey C#函数以编程方式访问“HKEY_LOCAL_MACHINE \ Software \ JavaSoft \ Java Development Kit \ <版本号>”。 – LeeCambl 2015-02-24 11:35:22

8

您可以检查注册表

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

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

在取消重定向到“请安装Java”页面的HTML页面一个小的小程序。

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

4

在子进程中启动'java -version'。检查退出代码并返回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); 
    } 
相关问题