Я пытаюсь динамически запускать .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" ).
Что было бы самым надежным решением для "дальних" решений для поиска самого современного пути java.exe из приложения С#?
Спасибо большое заблаговременно.
- EDIT -
Благодаря сочетанию 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();
}
}