Ответ 1
Они находятся под текущим пользователем: HKEY_CURRENT_USER\Software\JavaSoft\Prefs
Мы используем предпочтения 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 Единственная причина, по которой это имеет значение, заключается в том, что настройка изменяется в зависимости от того, в какой среде она выполняется. При этом часто бывает полезно имитировать эту среду, вручную вставив ключи реестра, а затем выполнив некоторую проверку.
Я работал как admin, но я не видел ключей в реестре, где я ожидал, что они будут.
Они находятся под текущим пользователем: HKEY_CURRENT_USER\Software\JavaSoft\Prefs
для systemRoot: HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft...
для userRoot: HKEY_CURRENT_USER\SOFTWARE\JavaSoft...
У меня была аналогичная проблема, когда я работал с настройками systemRoot, и с помощью монитора реестра я обнаружил, что место, где они хранятся, изменяется в зависимости от того, является ли операционная система Windows 32-разрядной или 64-разрядной.
В 32-битной ОС (Windows XP в моем случае) путь к системному реестру был
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-битных окнах реестр автоматически вставляет элемент пути 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 bit - JRE 1.7.0_60 (i586)
источники:
Связанный с этим вопрос на этом сайте
Документация Oracle - Java SE - Файл и свойства конфигурации развертывания
Хороший день