Мы используем настройки 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 Единственная причина, по которой это имеет значение, заключается в том, что параметр изменяется в зависимости от того, в какой среде он запущен. При этом часто полезно имитировать эту среду, вставляя ключи реестра вручную, а затем выполняя некоторую проверку.

Я работал от имени администратора, но не видел ключей в реестре там, где ожидал.

53
javamonkey79 9 Фев 2011 в 19:21
2
Вы можете использовать Sysinternals Process Monitor, чтобы увидеть операции реестра и файловой системы для этого процесса и попытаться определить, куда идут операции чтения/записи.
 – 
Sasha Goldshtein
9 Фев 2011 в 19:22
1
Почему он должен хранить что-либо под HKEY_LOCAL_MACHINE? Я ожидаю, что он будет жить под HKEY_CURRENT_USER. Также: зачем тебе это? Он не задокументирован по одной причине: на него не следует полагаться, и он может измениться в любое время.
 – 
Joachim Sauer
9 Фев 2011 в 19:25
Должно быть там: кстати, вы работаете от имени администратора?
 – 
bestsss
9 Фев 2011 в 19:27
Извините, я не заметил, что вы использовали systemRoot(), а не userRoot().
 – 
Joachim Sauer
9 Фев 2011 в 19:28
Я добавлю в редактирование, чтобы уточнить.
 – 
javamonkey79
9 Фев 2011 в 22:15

4 ответа

Они находятся под текущим пользователем: HKEY_CURRENT_USER\Software\JavaSoft\Prefs

63
AlexR 9 Фев 2011 в 19:25
Вы подтвердили это? например: Используйте приведенный выше код, а затем проверьте свой реестр? Он не отображается в regedit для меня.
 – 
javamonkey79
10 Фев 2011 в 10:03
2
Пользовательские настройки находятся в HKCU, системные настройки в HCKS (если вы не перезапишете их системными переменными). Однако путь в 64-битных окнах с 32-битной java находится под WoW64, как указано выше.
 – 
eckes
9 Фев 2015 в 07:04

У меня была аналогичная проблема, когда я работал с настройками 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-разрядной версии, могли сосуществовать на одной машине, сохраняя при этом свои настройки отдельно.

14
Hans Peter Hagblom 13 Окт 2014 в 20:00
1
В 64-разрядной версии Windows 7 я не вижу никаких настроек в HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft, но я вижу их в HKEY_CURRENT_USER\Software\JavaSoft\Prefs
 – 
sdjuan
22 Июл 2016 в 17:40

Некоторые настройки хранятся в ключах реестра, а некоторые другие (сейчас я проверю, какие именно) хранятся в текстовых файлах; например, параметр «Использовать сертификаты и ключи в хранилище ключей браузера» хранится в 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 — конфигурация развертывания Файл и свойства

Хорошего дня

1
Community 23 Май 2017 в 13:31
2
Скорее всего, это «файл свойств», управляемый с помощью java.util.Properties, очень простого API, представленного в Java 1.0. Тема вопроса — Preferences API, гораздо более сложный механизм, представленный в Java 1.4. Однако у каждого есть своя область применения.
 – 
Mario Rossi
11 Мар 2015 в 18:40

Для системыRoot:

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\...

Для пользователя Root:

HKEY_CURRENT_USER\SOFTWARE\JavaSoft\...
26
2 revs, 2 users 67% 23 Мар 2019 в 20:24
Вы подтвердили это? например: Используйте приведенный выше код, а затем проверьте свой реестр? Он не отображается в regedit для меня.
 – 
javamonkey79
10 Фев 2011 в 10:05
 – 
bestsss
10 Фев 2011 в 12:30
Да, это кажется правдоподобным объяснением. Тем не менее, я не могу найти ключи и в виртуальных локациях. Хм...
 – 
javamonkey79
11 Фев 2011 в 10:07