Мы используем настройки Java в некоторых наших приложениях и не замечаем этого, поскольку утилита, которая выполняет вызовы, довольно старая и была написана во времена Windows XP. Но похоже, что настройки Java больше не хранятся в реестре Windows 7 или хранятся где-то в другом месте.
Я ожидаю, что это будет в:
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs
Но я его там не вижу.
Что делает его более странным, так это то, что когда я запускаю это приложение:
public static void main( final String[] args ) throws BackingStoreException {
Preferences systemRoot = Preferences.systemRoot();
Preferences preferences = systemRoot.node( "com/mycompany/settings" );
systemRoot.put( "foo", "bar" );
systemRoot.put( "baz", "lolz" );
System.out.println( "-------------------------------" );
String[] keys = preferences.keys();
for( String key : keys ) {
System.out.println( key );
}
System.out.println( "-------------------------------" );
keys = systemRoot.keys();
for( String key : keys ) {
System.out.println( key );
}
}
Он действительно пишет (могу закомментировать выложенный файл и запустить его снова, и он работает), но новых ключей в реестре я не вижу.
Кроме того, я не вижу, чтобы это было задокументировано где-либо. Заранее спасибо.
РЕДАКТИРОВАНИЕ №1 Единственная причина, по которой это имеет значение, заключается в том, что параметр изменяется в зависимости от того, в какой среде он запущен. При этом часто полезно имитировать эту среду, вставляя ключи реестра вручную, а затем выполняя некоторую проверку.
Я работал от имени администратора, но не видел ключей в реестре там, где ожидал.
4 ответа
Они находятся под текущим пользователем: HKEY_CURRENT_USER\Software\JavaSoft\Prefs
У меня была аналогичная проблема, когда я работал с настройками systemRoot и с помощью монитора реестра обнаружил, что место, где они хранятся, меняется в зависимости от того, является ли операционная система Windows 32-разрядной или 64-разрядной.
В 32-битной ОС (в моем случае Windows XP) путь реестра systemRoot был
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs
В 64-битной ОС (в моем случае Windows 7) путь реестра systemRoot был
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs
В обеих системах использовалась одна и та же 32-разрядная среда JRE (JRE 1.6.0_20-b02).
При запуске 32-разрядного приложения (JVM) в 64-разрядной системе Windows реестр автоматически вставляет элемент пути Wow6432Node, чтобы приложения, скомпилированные для 32-разрядной или 64-разрядной версии, могли сосуществовать на одной машине, сохраняя при этом свои настройки отдельно.
Некоторые настройки хранятся в ключах реестра, а некоторые другие (сейчас я проверю, какие именно) хранятся в текстовых файлах; например, параметр «Использовать сертификаты и ключи в хранилище ключей браузера» хранится в C:\Users\%USER%\AppData\LocalLow\Sun\Java\Deployment\deployment.properties
:
#deployment.properties
#Thu Jun 12 15:26:53 CEST 2014
deployment.security.browser.keystore.use=false
deployment.modified.timestamp=1402579613914
deployment.version=7.21
deployment.browser.path=C\:\\Program Files\\Mozilla Firefox\\firefox.exe
#Java Deployment jre's
#Thu Jun 12 15:26:53 CEST 2014
deployment.javaws.jre.0.registered=true
deployment.javaws.jre.0.platform=1.7
deployment.javaws.jre.0.osname=Windows
deployment.javaws.jre.0.path=C\:\\Program Files\\Java\\jre7\\bin\\javaw.exe
deployment.javaws.jre.0.product=1.7.0_60
deployment.javaws.jre.0.osarch=x86
deployment.javaws.jre.0.location=http\://java.sun.com/products/autodl/j2se
deployment.javaws.jre.0.enabled=true
deployment.javaws.jre.0.args=
Это было проверено на Windows 7 pro / 32 бит — JRE 1.7.0_60 (i586)
Источники:
Похожий вопрос на этом сайте
Oracle — документация по Java SE — конфигурация развертывания Файл и свойства
Хорошего дня
java.util.Properties
, очень простого API, представленного в Java 1.0. Тема вопроса — Preferences API, гораздо более сложный механизм, представленный в Java 1.4. Однако у каждого есть своя область применения.
Для системыRoot:
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\...
Для пользователя Root:
HKEY_CURRENT_USER\SOFTWARE\JavaSoft\...
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
HKEY_LOCAL_MACHINE
? Я ожидаю, что он будет жить подHKEY_CURRENT_USER
. Также: зачем тебе это? Он не задокументирован по одной причине: на него не следует полагаться, и он может измениться в любое время.systemRoot()
, а неuserRoot()
.