Я пытаюсь динамически запустить .jar из сборки C # (используя 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 из приложения C #?
Заранее большое спасибо.
- РЕДАКТИРОВАТЬ -
Благодаря комбинации GenericTypeTea и Стивена Клири , я решил эту проблему следующим образом:
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();
}
}