Скорее всего, у вас 32-битный установщик, но вы ищете значение в 64-битном реестре.
32-битные исполняемые файлы имеют свои собственные настройки программного обеспечения в HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
. Действия реестра всегда читаются из представления реестра, которое соответствует разрядности установщика. Если вы установили 64-битный JDK и не используете 32-битный JDK, интересующее вас значение реестра будет пустым в 32-битном представлении реестра.
Чтобы проверить, действительно ли это проблема в вашем случае, попробуйте выбрать «Генерировать 64-битные исполняемые файлы» в шаге «32-битный или 64-битный» мастера мультимедиа, тогда он должен работать должным образом.
С помощью API вы можете явно настроить представление реестра:
Object value = WinRegistry.getValue(
RegistryRoot.HKEY_LOCAL_MACHINE,
"SOFTWARE\\JavaSoft\\Java Development Kit",
"CurrentVersion",
RegistryView.BIT64
);
if (value != null) {
context.setVariable("javaCurrentVersion", value.toString());
}
Используя RegistryView.BIT64
и RegistryView.BIT32
, вы можете получить доступ к 64-разрядному представлению из 32-разрядного установщика и 32-разрядному представлению из 64-разрядного установщика.