Как часть установщика, который я создаю, я хочу проверить, установлен ли уже Java Development Kit (в частности, JDK, JRE не подходит). На моем локальном компьютере я четко вижу ключ в реестре (HKLM \ SOFTWARE \ JavaSoft \ Java Development Kit), но следующий код (C #) не находит указанный ключ:

RegistryKey jdkKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\JavaSoft\Java Development Kit");

Когда я исследую, какие ключи присутствуют в «HKLM \ SOFTWARE \ JavaSoft», используя следующий код, Java Development Kit там нет.

string[] keyNames = Registry.LocalMachine.OpenSubKey("SOFTWARE\\JavaSoft").GetSubKeyNames();

Я тоже программно посмотрел на свои переменные среды, и ничего там, похоже, не указывает на присутствие JDK (он есть, как я сказал выше, он находится в реестре, и я использую его для разработки Java для программы, для которой я создаю установщик, как ни странно).

Любые идеи относительно того, как я могу определить, установлен ли JDK? Как я уже сказал, одной JRE будет недостаточно, поскольку я делаю некоторую компиляцию во время выполнения, для которой мне нужен JDK.

0
LeeCambl 26 Фев 2015 в 12:00

3 ответа

Лучший ответ

Похоже, я лаял не на то дерево (реестр). Я не понимал, что корень реестра зависит от платформы конфигурации моего приложения. Поскольку целевая платформа моего приложения была установлена ​​на x86, все поиски начинались с узла Wow6432Node моего реестра. Изменение моей целевой платформы на «Any CPU» устранило это, и я могу программно получить доступ ко всем деревьям моего реестра, поскольку они отображаются графически в regedit.

Возможно, стоит отметить, что я использовал Visual C # 2010 Express для этого, поэтому изменение моей целевой платформы должно было выполняться путем прямого редактирования XML моего файла «.csproj», поскольку для этого нет параметров пользовательского интерфейса.

0
LeeCambl 26 Фев 2015 в 10:45

Если вы ищете Java Development Kit на машине, вы можете попробовать проверить переменную среды JAVA_HOME, которая обычно указывает на корень установки JDK.

string javaHome = Environment.GetEnvironmentVariable("JAVA_HOME");
if (javaHome == null)
    Console.WriteLine("JDK seems not to be present");   
0
Thorsten Dittmar 26 Фев 2015 в 09:23

Попробуй это

System.out.println(System.getProperty("java.library.path"));

Если пустой, не следует устанавливать

1
Noomak 26 Фев 2015 в 09:21