从标准用户写入管理员的HKCU

问题描述:

我有一个在visual studio 2010中创建的安装程序,它写入注册表的HKCU。它在安装和运行期间都需要管理权限。从标准用户写入管理员的HKCU

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

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

根据另一个堆栈溢出question,相反的事情正在发生,即高架安装写入到管理员的HKCU。任何人都可以帮助我如何实现该解决方法。

[注意:我知道将代码更改为从HKLM读取,而不是使用HKCU可能是最好的解决方案,但对我来说不是这样。因为最近从HKLM变成了另一个大问题,被还原。]

+0

我猜这是一个基于MSI的安装程序?我认为您描述的行为可能与MSI预期的一样,因为部分安装是在用户的上下文中完成的,部分在管理上下文中完成。尝试从提升的命令窗口启动安装程序。 –

+0

@哈里约翰斯顿,你可以请给一些更多的细节。我不明白你有关“尝试从提升的命令窗口启动安装程序”的建议。 :/ –

+0

打开开始菜单并键入'cmd',然后输入'CONTROL-SHIFT-ENTER'。这将打开一个提升的命令窗口。如果您从这里启动MSI文件,它可能会将HKCU条目放在正确的位置。 –

现在,当我与行政特权安装它,

如何你真正开始安装?你有MSI的EXE包装,并用命令“以管理员身份运行”启动它?该包装是否在安装期间启动MSI后者?通常情况下,如果MSI由高级进程启动(无论是EXE包装还是提升的cmd.exe),则将每个用户数据(注册表和文件)重定向到新用户的位置(即现在安装程序正在运行的管理员)。因此,您的注册表项也应该在管理员的HKCU配置单元下创建,并且您的应用程序在以管理员身份启动时应该可以找到它们。

作为一个方面的讨论,是不是真的建议有从HKCU应用负载项,但运行它直接升高,情况可能会变得混乱。如果您希望您的应用以管理员身份运行,那么您应该按照计算机安装它并使用适当的文件和注册表位置。是什么让你们切换到每个用户安装的错误? (也许我们可以帮助一个更好的解决方案)

+0

我在安装程序上设置了“需要管理员”选项。因此,当我尝试从标准用户帐户安装它时,它会要求输入管理员密码。 我不知道改变的正确原因。据我所知,情况就是,项目的一部分被包含在另一个项目中,该项目不需要任何管理员权限,也不使用注册表。但是,由于这个小型项目正在HKLM注册中心编写,整个安装程序需要管理权限。为了避免这种情况,整个注册表都转移到了HKCU。虽然我相信这不是最好的选择。 –

+0

纠正我,如果我错了,但从我现在了解你没有项目需要管理员权限,因为你只与HKCU工作,为什么你仍然要求管理员凭据?关于您的原始问题,您是否可以发布安装程序的下载链接以及您正在进行的安装的详细信息?我也想做一些测试(在虚拟机中),通常您的EXE应该将执行凭据传递给您的MSI,并且HKCU注册表条目应该写在应用尝试读取它们的相同位置。 –

+0

不。实际上有三个项目。两个大的 - 一个需要管理员权限才能打开套接字和其他问题,另一个则不需要。现在还有另一个小项目,这两个共同点。此前,小项目和需要管理员权限的项目正在使用HKLM。但是在整合小型项目之后,另一个不需要管理员权限的项目开始要求它写入HKLM。 –