微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windows 安装程序:注册表读取奇怪的行为

如何解决Windows 安装程序:注册表读取奇怪的行为

更新:这个问题突然自行消失了,此后我再没有重现过。我只能假设注册表权限存在一些奇怪的问题,但没有显示在权限 UI 中,否则我不知道问题是什么或解决了什么问题。


背景

在我的安装程序中,我有一个自定义操作,需要读取该软件以前版本可能创建的一些注册表值(它们不是由安装程序创建的)。该软件在 SYstem 帐户下运行,安装程序以提升的权限运行。操作系统、安装程序和自定义操作都是 64 位的。值以 HKLM 为单位。

问题

尝试使用 RegQueryValueEx 读取自定义操作中的值总是返回 ERROR_FILE_NOT_FOUND,这意味着即使它们存在,它们也不存在。

我已经确定,如果自定义操作使用 RegSetValueEx 创建一个注册表值,那么它可以读取它,即使在它写入该值的后续执行中也是如此。我通过临时添加RegSetValueExRegQueryValueEx调用获取新值、​​运行安装程序、删除 RegSetValueEx 调用并重新运行安装程序来对此进行测试。

我还确定自定义操作能够成功写入应用程序创建的值,然后可以立即读取它们,但在后续执行时仍然无法读取它们。

排除的答案

以上测试确认该值位于正确的注册表路径中,排除重定向、拼写错误等。

测试还排除了只包含自定义操作写入的值的本地虚拟注册表,因为自定义操作可以读取它在后续执行中没有写入的值。

最明显的潜在原因是权限问题,但自定义操作创建的值和应用程序创建的另一个值(自定义操作无法读取)具有相同的权限,只要 RegEdit 能够给我看看。

我尝试搜索其他遇到此问题的人的实例,但我只找到了与 32 位注册重定向和权限相关的结果,这两个似乎都不是这里的问题。

我可以运行任何解决方案或进一步的测试来缩小问题的范围,我们将不胜感激。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。