Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 7中存储的Java首选项在哪里?_Java_Windows 7_Preferences - Fatal编程技术网

Windows 7中存储的Java首选项在哪里?

Windows 7中存储的Java首选项在哪里?,java,windows-7,preferences,Java,Windows 7,Preferences,我们在一些应用程序中使用Java首选项,但并没有真正注意到这一点,因为打电话的实用程序相当古老,并且是在WindowsXP时代编写的。但是Java首选项似乎不再存储在Windows7的注册表中,或者它们存储在不同的地方 我希望它在: HKEY\U LOCAL\U MACHINE\SOFTWARE\JavaSoft\Prefs 但我在那里看不到 更让人吃惊的是,当我运行这个应用程序时: public static void main( final String[] args ) throws Ba

我们在一些应用程序中使用Java首选项,但并没有真正注意到这一点,因为打电话的实用程序相当古老,并且是在WindowsXP时代编写的。但是Java首选项似乎不再存储在Windows7的注册表中,或者它们存储在不同的地方

我希望它在:

HKEY\U LOCAL\U 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唯一重要的原因是设置会根据运行它的环境而变化。这就是说,通过手动插入注册表项,然后执行一些检查来模拟该环境通常是有用的

我是以管理员身份运行的,但在注册表中没有看到预期的注册表项。

对于systemRoot:

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\...
对于用户根:

HKEY_CURRENT_USER\SOFTWARE\JavaSoft\...

它们在当前用户下:
HKEY\u current\u user\Software\JavaSoft\Prefs

我在处理systemRoot首选项时遇到了类似的问题,在注册表监视器的帮助下,我发现它们的存储位置根据Windows操作系统是32位还是64位而变化

在32位操作系统(我的例子是Windows XP)下,系统根注册表路径是

HKEY\U LOCAL\U MACHINE\SOFTWARE\JavaSoft\Prefs

在64位操作系统(我的例子是Windows 7)下,systemRoot注册表路径是

HKEY\u LOCAL\u MACHINE\SOFTWARE\Wow6432Node\JavaSoft\Prefs

两个系统上使用了相同的32位JRE(JRE 1.6.0_20-b02)


在64位windows上运行32位应用程序(JVM)时,注册表会自动插入Wow6432Node path元素,以允许为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)上验证

资料来源:


祝您有愉快的一天

您可以使用Sysinternals Process Monitor查看该进程的注册表和文件系统操作,并尝试推断读/写操作的方向。它为什么要在
HKEY_LOCAL_MACHINE
下存储任何内容?我希望它能在其下生存。另外:您为什么在意?它没有文档记录是因为:您不应该必须在那里:顺便问一下,您是以管理员身份运行的吗?对不起,我没有看到您使用的是
systemRoot()
,而不是
userRoot()
。我将添加编辑以澄清。您确认了吗?例如:使用上述代码,然后检查您的注册表?它不会显示在regedit中。用户设置在HKCU下,系统设置在HCKS下(除非您使用系统变量覆盖它)。64位windows和32位java上的路径在WoW64下,如上文所述。您确认了吗?例如:使用上述代码,然后检查您的注册表?它不会在regedit中为我显示。检查一下?是的,这似乎是一个合理的解释。然而,我也无法在虚拟位置找到键。嗯…这是最专业的bably是一个“属性文件”使用
java.util.Properties
进行管理,这是java 1.0中引入的一种非常基本的API。问题的主题是Preferences API,这是java 1.4中引入的一种更为复杂的机制。不过,每种机制都有自己的适用范围。在64位windows 7上,我没有在HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoft下看到任何prefs,但我在在HKEY\U CURRENT\U USER\Software\JavaSoft\Prefs上看到它们吗