如何用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/

10-09 05:40
查看更多