2011-02-09 88 views
38

我们在我们的一些应用程序中使用了Java偏好设置,并没有真正注意到这一点,因为打电话的实用程序相当陈旧,并且是在Windows XP中编写的。但似乎Java偏好不再存储在Windows 7的注册表中 - 或者它们存储在不同的地方。Windows 7中存储的Java首选项在哪里?

,我希望它是:

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Prefs

但我没有看到它在那里。

是什么使得它wierder是,当我运行这个程序:

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这个问题的唯一原因是设置更改取决于它运行的环境。这就是说,通过手动插入注册表项并进行一些检查来模拟该环境通常很有用。

我当时是以管理员身份运行,但我没有在注册表中看到我期望他们的密钥。

+2

你可以使用Sysinternals的进程监视器看到该过程的注册表和文件系统操作,并尝试推断读取/写入的位置。 – 2011-02-09 16:22:34

+1

为什么它应该在HKEY_LOCAL_MACHINE下存储任何东西?我期望它在[`HKEY_CURRENT_USER`](http://en.wikipedia.org/wiki/Windows_Registry#HKEY_CURRENT_USER_.28HKCU.29)下生活。另外:你为什么在意?这是没有证据的,原因是:你不应该依赖它,它可以随时改变。 – 2011-02-09 16:25:32

+0

必须在那里:btw你以管理员身份运行吗? – bestsss 2011-02-09 16:27:09

回答

20

为SYSTEMROOT: HKEY_LOCAL_MACHINE \ SOFTWARE \ JavaSoft的...

为userRoot: HKEY_CURRENT_USER \ SOFTWARE \ JavaSoft的...

45

他们是在当前用户下:HKEY_CURRENT_USER\Software\JavaSoft\Prefs

13

我有一个当我使用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)。

在64位窗口上运行32位应用程序(JVM)时,注册表会自动插入Wow6432Node路径元素,以允许为32位或64位编译的应用程序共存于同一个路径元素上同时保持其设置不同。

1

一些首选项存储在注册表项中,而其他一些(现在我将检查确切的是哪些)似乎存储在文本文件中;例如,偏好 “使用证书和密钥存储浏览器密钥” 存储在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专业版/ 32位进行了验证 - JRE 1.7.0_60(i586系统)

来源:
​​
Oracle - Java SE documentation - Deployment Configuration File and Properties

有一个愉快的一天