Java 无法从Vista上的HKEY_LOCAL_计算机读取配置数据

Java 无法从Vista上的HKEY_LOCAL_计算机读取配置数据,java,windows-vista,permissions,registry,Java,Windows Vista,Permissions,Registry,我们有一个Java Web Start应用程序,正在尝试使用HKEY_LOCAL_MACHINE而不是HKEY_CURRENT_USER存储应用程序配置数据。我们可以让具有管理员权限的人在第一时间启动应用程序并设置配置,以便它将值成功存储在注册表中。尽管如此,没有管理员权限的后续Vista用户似乎甚至无法从HKEY\U LOCAL\U MACHINE中的注册表读取值 也许我们的方法是不正确的,有更好的方法来存储应用程序配置数据。有人能帮忙吗?我可能错了,但非管理员用户无权访问HKLM perio

我们有一个Java Web Start应用程序,正在尝试使用
HKEY_LOCAL_MACHINE
而不是
HKEY_CURRENT_USER
存储应用程序配置数据。我们可以让具有管理员权限的人在第一时间启动应用程序并设置配置,以便它将值成功存储在注册表中。尽管如此,没有管理员权限的后续Vista用户似乎甚至无法从
HKEY\U LOCAL\U MACHINE
中的注册表读取值

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

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

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

通常用于在客户端计算机上存储特定于应用程序的数据。在Windows计算机上,这将在后台写入Windows注册表。这是关于这个主题的一个又一个例子


如果您想获得对Windows注册表的更多访问权,那么您可能会发现它很有用,但这当然只有在Windows机器上执行webstart应用程序时才起作用,而不是在Linux/Mac/等上执行。java.util.PreferencesAPI在这方面更为抽象。

您的程序可能会受到影响

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


此外,由于以下原因,管理员用户将被视为非管理员用户,除非所述程序专门启动以使用管理员权限运行。安装程序必须以管理员权限运行,才能写入HKLM区域。

感谢您的回答。您已证实我们怀疑非管理员用户无权访问HKLM。我们的困境是,没有地方存储实现我们软件的组织特有的应用程序配置数据,没有管理员权限的后续用户(不是原始安装程序)可以读取这些数据。我们已经实现了使用ALLUSERSPROFILE环境设置并将应用程序配置写入文件(而不是注册表)的变通方法。我们使用ALLUSERSPROFILE并将其写入文件存储(而不是注册表)作为变通方法。注册表中是否有任何地方可以存储实现我们的软件的组织独有的应用程序配置数据,而没有管理员权限的后续用户(不是原始安装程序)可以读取这些数据?或者,我们写入ALLUSERSPROFILE环境文件夹的方法是一种好方法吗?我想我也遇到过这种情况。32位应用程序似乎无法读取HKLM(除非是存储在您提到的VirtualStore中的内容,否则它们可以读取)。因此,如果您使用regedit添加它,然后从HKLM中以32位读取它,它神秘地不存在…另请参阅其他解决方法(使用key_wow64_64key)。我知道我正在重新提出一个旧问题,但需要澄清。32位应用程序对其他32位应用程序写入的HKLM值具有读取权限(我实际上有一个应用程序可以这样做)。在Windows 7下,如果您尝试阅读
HKLM/SOFTWARE/my-com/my-app/my-key
,您最终实际阅读
HKLM/SOFTWARE/Wow6432Node/my-com/my-app/my-key