【发布时间】:2010-06-14 14:39:55
【问题描述】:
我正在尝试从 C# 程序集动态运行 .jar(使用 Process.Start(info))。现在,我可以从控制台应用程序运行:
ProcessStartInfo info = new ProcessStartInfo("java", "-jar somerandom.jar");
然而,在程序集中,我不断收到“系统找不到指定的文件”的Win32Exception,并且必须将行更改为 Java 的完整路径,如下所示:
ProcessStartInfo info = new ProcessStartInfo("C:\\Program Files\\Java\\jre6\\bin\\java.exe", "-jar somerandom.jar");
这显然不行。我需要一种方法来动态(但以声明方式)确定 Java 的安装位置。
我开始考虑查看注册表,但是当我到达那里时,我注意到版本有特定的键并且它们甚至不能保证是数字(例如“HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment \1.6" 和 "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6.0_20")。
从 C# 应用程序中查找最新 java.exe 路径的最可靠的“长期”解决方案是什么?
非常感谢。
- 编辑-
感谢GenericTypeTea 和Stephen Cleary 的回答,我已经解决了以下问题:
private String GetJavaInstallationPath()
{
String javaKey = "SOFTWARE\\JavaSoft\\Java Runtime Environment";
using (var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(javaKey))
{
String currentVersion = baseKey.GetValue("CurrentVersion").ToString();
using (var homeKey = baseKey.OpenSubKey(currentVersion))
return homeKey.GetValue("JavaHome").ToString();
}
}
【问题讨论】: