无法从Vista上的HKEY_LOCAL_MACHINE读取配置数据

时间:2010-04-22 13:59:09

标签: java windows-vista permissions registry

我们有一个Java Web Start应用程序,并尝试使用HKEY_LOCAL_MACHINE而不是HKEY_CURRENT_USER来存储应用程序配置数据。我们可以让具有管理员权限的人在第一时间启动应用程序并设置配置,以便它成功地将值存储在注册表中。然而,后来没有管理员权限的Vista用户似乎无法读取}中注册表中的值

也许我们的方法不正确,并且有更好的方法来存储应用程序配置数据。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

您的计划可能会受到registry virtualization的影响。

如果32位程序尝试写入HKLM\SOFTWARE下的注册表并且权限不允许写入成功,则Virtualization将启动。程序将被告知写入成功,并且数据实际上是写入HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE。然后,当32位程序尝试从注册表中读取时,VirtualStore文件夹中的值将返回到程序。通过这种方式,该程序被欺骗认为它成功写入了它没有权限的位置,并且32位程序继续在Vista / Windows 7下工作而不做任何更改。

此外,由于UAC,管理员用户将被视为非管理员用户,除非专门启动该程序以使用管理员权限运行。安装程序必须以管理员权限运行,以便他们可以写入HKLM区域。

答案 1 :(得分:1)

我可能错了,但非管理员用户无法访问HKLM期间。读或写。

如果可能,请将您的设置存储在HKCU中。让应用程序包含默认设置,如果找不到HKCU值,则使用默认值并将其存储在注册表中。然后,用户应该能够更改这些值。

答案 2 :(得分:1)

通常使用java.util.Preferences在客户端计算机上存储特定于应用程序的数据。在Windows机器上,这将在幕后写入Windows注册表。这是关于主题的Sun tutorial/guidemore technical article

如果您希望获得对Windows注册表的更多访问权限,那么您可能会发现jRegistryKey API很有用,但这当然只有在Windows计算机上执行webstart应用程序而不是Linux / MAC /等。 java.util.Preferences API更加抽象。