【问题标题】:Writing into administrator's HKCU from standard user从标准用户写入管理员的 HKCU
【发布时间】:2014-01-17 07:28:39
【问题描述】:

我在 Visual Studio 2010 中创建了一个安装程序,它写入注册表的 HKCU。它在安装和运行期间都需要管理权限。

现在,当我使用管理权限安装它时,注册表项会从标准帐户写入标准用户的 HKCU 注册表部分。但是当我以管理权限运行它时,它正在从管理员的注册表 HKCU 中读取。

经过大量搜索,我得出的结论是,当您以提升的权限运行程序时,它会搜索提升用户的 HKCU。但是为什么在安装过程中没有发生同样的事情,因为我当时也有管理权限。

根据另一个堆栈溢出question,正在发生相反的事情,即提升安装写入管理员的 HKCU。谁能帮助我如何实现该解决方法。

[注意:我知道将代码更改为从 HKLM 读取和写入,而不是使用 HKCU 可能是最好的解决方案,但对我来说不是。因为最近它从 HKLM 更改为另一个大问题,不能已恢复。]

【问题讨论】:

  • 我猜这是一个基于 MSI 的安装程序?我认为您描述的行为可能与 MSI 的预期一样,因为部分安装是在用户上下文中完成的,部分是在管理员上下文中完成的。尝试从提升的命令窗口启动安装程序。
  • @HarryJohnston,您能否提供更多详细信息。我不明白您关于“尝试从提升的命令窗口启动安装程序”的建议。 ://
  • 打开开始菜单并输入cmd,然后输入CONTROL-SHIFT-ENTER。这将打开一个提升的命令窗口。如果您从这里启动 MSI 文件,它可能会将 HKCU 条目放在正确的位置。

标签: windows visual-studio-2010 installation registry user-accounts


【解决方案1】:

现在当我以管理权限安装它时,

您如何实际开始安装?您的 MSI 上是否有 EXE 包装器并使用“以管理员身份运行”命令启动它?那个包装器是在安装过程中启动 MSI 吗?

通常,如果 MSI 由提升的进程(无论是 EXE 包装程序还是提升的 cmd.exe)启动,每个用户的数据(注册表和文件)都会重定向到新用户的位置(即现在安装程序正在运行的管理员)。因此,您的注册表项也应该在管理员的 HKCU 配置单元下创建,并且您的应用程序应该在以管理员身份启动时找到它们。

作为附带讨论,不建议让应用程序从 HKCU 加载条目,而是直接提升运行它,事情会变得混乱。如果您希望您的应用程序以管理员身份运行,那么您应该在每台机器上安装它并使用适当的文件和注册表位置。什么是让你们切换到按用户安装的错误? (也许我们可以提供更好的解决方案)

【讨论】:

  • 我在安装程序上设置了“需要管理员”选项。因此,当我尝试从标准用户帐户安装它时,它会要求输入管理员密码。 我不知道改变的正确原因。据我所知,情况就像,项目的一部分包含在另一个项目中,不需要任何管理员权限,也不需要使用注册表。但是由于这个小项目是在 HKLM 注册表中编写的,所以整个安装程序都在要求管理权限。为避免这种情况,整个注册中心都转移到了 HKCU。虽然我认为这不是最好的选择。
  • 如果我错了,请纠正我,但据我所知,您现在没有需要管理员权限的项目,因为您只与 HKCU 合作,为什么您仍然要求管理员凭据?关于您的原始问题,您能否发布安装程序的下载链接以及您正在执行的安装的详细信息?我也想做一些测试(在虚拟机中),因为通常你的 EXE 应该将执行凭据传递给你的 MSI,并且 HKCU 注册表项应该写在应用程序尝试读取它们的相同位置。
  • 没有。实际上有三个项目。两个大 - 一个需要管理员权限才能打开套接字和其他问题,另一个不需要。现在还有一个这两个共同的小项目。以前小项目和需要管理员权限的项目都使用HKLM。但是在集成小项目后,另一个不需要管理员权限的项目开始要求它写入 HKLM。
  • 很抱歉无法为您提供任何示例EXE。公司财产。 ://
  • @Codename_DJ:您实际运行什么文件来进行安装?它是 .MSI 文件还是 .EXE 文件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
  • 2017-03-29
相关资源
最近更新 更多