【问题标题】:Cannot read config data from HKEY_LOCAL_MACHINE on Vista在 Vista 上无法从 HKEY_LOCAL_MACHINE 读取配置数据
【发布时间】:2011-02-11 02:18:36
【问题描述】:

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

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

【问题讨论】:

    标签: java windows-vista permissions registry


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答。您已证实我们怀疑非管理员用户无权访问 HKLM。我们的困境是,没有地方可以存储实施我们软件的组织独有的应用程序配置数据,没有管理员权限的后续用户(不是原始安装程序)可以读取。我们已经使用 ALLUSERSPROFILE 环境设置并将 app-config 写入文件而不是注册表来实现解决方法。
    【解决方案2】:

    您的程序可能受到registry virtualization 的影响。

    如果一个 32 位程序尝试写入HKLM\SOFTWARE 下的注册表,并且权限不允许写入成功,则虚拟化启动。程序被告知写入成功,数据实际上是写入HKCU\Software\Classes\VirtualStore\MACHINE\SOFTWARE。然后,当 32 位程序尝试从注册表读取时,VirtualStore 文件夹中的值将返回给程序。这样,程序就会被欺骗以为它成功写入了一个它没有权限的位置,并且 32 位程序继续在 Vista / Windows 7 下运行而无需更改。

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

    【讨论】:

    • 我想我也遇到了这个问题。 32 位应用程序似乎无法从 HKLM 读取(除非它是存储在您提到的 VirtualStore 中的东西,否则它们可以)。因此,如果您使用 regedit 添加它,然后从 HKLM 以 32 位读取它,它神秘地不存在...另请参阅 stackoverflow.com/questions/252297/… 以了解另一种解决方法(使用 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
    【解决方案3】:

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

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

    【讨论】:

    • 我们正在使用 ALLUSERSPROFILE 并写入其中的文件存储而不是注册表作为解决方法。注册表中是否有任何地方可以存储实施我们软件的组织所独有的应用程序配置数据,没有管理员权限的后续用户(不是原始安装程序)可以读取?或者,我们写入 ALLUSERSPROFILE 环境文件夹的方法是一种好方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 2012-10-01
    • 1970-01-01
    • 2016-11-05
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多