如何用Java编写系统首选项,使用Preferences.systemRoot()
?
我试过:
Preferences preferences = Preferences.systemRoot();
preferences.put("/myapplication/databasepath", pathToDatabase);
但我收到一条错误信息:
2010-maj-29 19:02:50 java.util.prefs.WindowsPreferences openKey
VARNING: Could not open windows registry node Software\JavaSoft\Prefs at root 0x80000002. Windows RegOpenKey(...) returned error code 5.
Exception in thread "AWT-EventQueue-0" java.lang.SecurityException: Could not open windows registry node Software\JavaSoft\Prefs at root 0x80000002: Access denied
at java.util.prefs.WindowsPreferences.openKey(Unknown Source)
at java.util.prefs.WindowsPreferences.openKey(Unknown Source)
at java.util.prefs.WindowsPreferences.openKey(Unknown Source)
at java.util.prefs.WindowsPreferences.putSpi(Unknown Source)
at java.util.prefs.AbstractPreferences.put(Unknown Source)
at org.example.install.Setup$2.actionPerformed(Setup.java:43)
我想这样做,因为我想安装一个嵌入式javadb数据库,并让计算机上的多个用户在应用程序中使用同一个数据库。
如何解决这个问题?我可以调用UAC并从Java中执行吗?如果我在写入时作为管理员登录,如果我作为用户登录,我可以用Java应用程序读取这些值吗?
最佳答案
不能从Java首选项写入任意注册表位置-所有偏好都存储在子键Software\Javasoft\Prefs
下。将用户首选项映射到hkey_current_用户配置单元,并将系统映射到HKEY_LOCAL_MACHINE
配置单元。
要写入注册表,可以使用windows“reg”命令行工具。This page详细说明修改注册表的其他方法。包括使用.reg
文件。
我有同样的需求——从Java编写注册表——我通过编写一个小.NET命令行实用程序来解决它。
sun windows jdk附带了一些通用代码,可以写入注册表的任意部分(windowsprefferences),但它不是公共的。This article描述如何使用反射访问该类。
关于java - 如何使用Java编写系统偏好设置?我可以调用UAC吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2935933/