【发布时间】:2011-06-24 06:28:58
【问题描述】:
我们在某些应用程序中使用 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 );
}
}
它实际上会写入(我可以注释掉并再次运行它并且它可以工作)但我没有在注册表中看到新键。
另外,我似乎无法在任何地方看到此文档。提前致谢。
EDIT #1 这很重要的唯一原因是设置的变化取决于它运行的环境。话虽如此,通过手动插入注册表项然后进行一些检查来模拟该环境通常很有用。
我以管理员身份运行,但我没有在注册表中看到我期望的键。
【问题讨论】:
-
您可以使用 Sysinternals Process Monitor 查看该进程的注册表和文件系统操作,并尝试推断读取/写入的位置。
-
为什么要在
HKEY_LOCAL_MACHINE下存储任何东西?我希望它会在HKEY_CURRENT_USER下运行。另外:你为什么在乎?它没有记录是有原因的:你不应该依赖它,它可以随时更改。 -
必须在那里:顺便说一句,您是以管理员身份运行的吗?
-
抱歉,我没有看到您使用的是
systemRoot(),而不是userRoot()。 -
我将添加编辑以澄清。
标签: java windows-7 preferences