Как использовать действия реестра - PullRequest
3 голосов
/ 21 ноября 2011

Кто-нибудь знает, как использовать операции чтения из реестра Windows или записи в него?Все, что я получаю, это неудачи при попытке.

Примером может быть попытка прочитать с HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit ключ CurrentVersion, который, как я знаю, есть и установлен, не может прочитать.Я установил для корня реестра значение HKEY_LOCAL_MACHINE, а для имени ключа - SOFTWARE\JavaSoft\Java Development Kit, а для имени значения - CurrentVersion, но это все равно не удалось.Любая помощь будет очень признателен.

Спасибо.

1 Ответ

2 голосов
/ 22 ноября 2011

Скорее всего, у вас 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-разрядного установщика.

...