2014-10-31 82 views
-1

如果安装了JRE,我想检查C#,其次是哪个版本,以及它是否符合我的应用程序所需的版本。想要检查是否安装了Java,如果是这样,哪个版本

我目前使用下面的代码:

RegistryKey rk = Registry.LocalMachine; 
RegistryKey subKey = rk.OpenSubKey("SOFTWARE\\JavaSoft\\Java Runtime Environment"); 
string currentVersion = subKey.GetValue("CurrentVersion").ToString(); 
string neededVersion = "1.7"; 
if (currentVersion == neededVersion) 
{ 
      //do something 
} 
else 
{ 
      //do something else 
} 

但是,这仅适用于Java的计算机上,在它的注册表。否则,你会得到一个System.NullReferenceException。

我不知道我该怎么做,有人可以帮我吗?

这有点困难,因为我想在一个脚本中使用前面提到的两件事情。

+2

在CMD中执行'java -version'。 – 2014-10-31 16:35:42

+0

@Mahdad你可以在C#中执行CMD命令以及... – 2014-10-31 16:37:45

+0

@Mahdad这就是C#。您可以使用System.Process.Start运行命令。 – furkle 2014-10-31 16:37:51

回答

0

有两种方法可以做到这一点,我认为 - 一种是你上面这样做的方式,另一种方式就像Luiggi所建议的那样,那就是从你的C#程序执行一个cmd命令。

我认为你可能更喜欢像你在做的那样查询注册表,但是使用try-catch块或检查null,并以某种方式处理失败。但是,如果我弄错了,并且有一些常见的方式,用户可以在没有注册表项的情况下拥有Java,那么我将使用System.Diagnostics.Process。 System.Diagnostics.ProcessStartInfo对象可用于构建流程的所有选项,并在启动之前传递给流程。

try 
{ 
    ProcessStartInfo procStartInfo = new ProcessStartInfo(yourFilePath, yourArgument); 
    procStartInfo.RedirectStandardOutput = true; 
    procStartInfo.RedirectStandardError = true; 
    procStartInfo.UseShellExecute = false; 

    Process proc = new Process(); 
    proc.StartInfo = procStartInfo; 
    proc.Start(); 
} 
catch (Exception e) 
{ 
    Console.WriteLine(e.ToString()); 
} 
+0

就是这样!然而,使用空值检查非常有效,但是现在我得到了一堆ifelse语句......但这没关系!它工作正常,现在! – 2014-10-31 19:49:58

+0

@AlbertJanPetersen真棒,感谢您接受! – furkle 2014-10-31 19:50:16

相关问题