Как определить местоположение установки Windows Java

Я пытаюсь динамично выполнить .jar от блока C# (использование Process.Start(info)). Теперь, из консольного приложения я могу просто работать:

ProcessStartInfo info = new ProcessStartInfo("java", "-jar somerandom.jar");

В блоке, однако, я продолжаю получать a Win32Exception из "Системы не может найти файл указанным" и иметь для изменения строки на полный путь Java как так:

ProcessStartInfo info = new ProcessStartInfo("C:\\Program Files\\Java\\jre6\\bin\\java.exe", "-jar somerandom.jar");

Это, очевидно, не сделает. Мне нужен путь к динамично (но декларативно) определяют установленное местоположение Java.

Я начал думать смотрящий на реестр, но когда я добрался там, я заметил, что были определенные ключи для версий и что они, как даже могли гарантировать, не будут числовыми (например, "Время выполнения HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Environment\1.6" и "Время выполнения HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Environment\1.6.0_20").

Каково было бы самое надежное решение "долгого пути" нахождения самого актуального пути java.exe из приложения C#?

Большое спасибо заранее.

- РЕДАКТИРОВАНИЕ -

Благодаря комбинации ответов 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();
    }
}
24
задан Community 23 May 2017 в 10:30
поделиться

2 ответа

Сделать это можно через реестр. Но вы искали не в том месте. Я собрал для вас быстрый пример:

private string GetJavaInstallationPath()
{
    string environmentPath = Environment.GetEnvironmentVariable("JAVA_HOME");
    if (!string.IsNullOrEmpty(environmentPath))
    {
       return environmentPath;
    }

    string javaKey = "SOFTWARE\\JavaSoft\\Java Runtime Environment\\";
    using (Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(javaKey))
    {
        string currentVersion = rk.GetValue("CurrentVersion").ToString();
        using (Microsoft.Win32.RegistryKey key = rk.OpenSubKey(currentVersion))
        {
            return key.GetValue("JavaHome").ToString();
        }
    }
}

Затем, чтобы использовать его, просто сделайте следующее:

string installPath = GetJavaInstallationPath();
string filePath = System.IO.Path.Combine(installPath, "bin\\Java.exe");
if (System.IO.File.Exists(filePath))
{
    // We have a winner
}
28
ответ дан 29 November 2019 в 00:01
поделиться

Насколько мне известно, идея заключается в том, что последняя версия Java, установленная в системе, является первой, найденной в переменной среды PATH, поэтому вам не нужно искать какие-либо ключи реестра, просто запустите ее.

Попробуйте:

ProcessStartInfo info = new ProcessStartInfo("java.exe", "-jar somerandom.jar");

Если это не сработает, убедитесь, что java.exe находится на вашем пути, и дайте мне знать.

1
ответ дан 29 November 2019 в 00:01
поделиться