我在visual studio 2010中创建了一个安装程序,该安装程序写入HKCU的注册表。它在安装和运行期间都需要管理权限。
现在,当我使用管理权限安装它时,从标准帐户将注册表项写入标准用户的HKCU注册表部分。但是当我使用管理权限运行它时,它正在从管理员的注册表HKCU中读取。
经过大量搜索后,我得出的结论是,当您运行具有提升权限的程序时,它会搜索提升用户的HKCU。但是为什么在安装过程中没有发生同样的事情,因为那时我也有行政特权。
根据另一个堆栈溢出question,正在发生相反的事情,即高架安装写入管理员的HKCU。任何人都可以帮助我如何实现这种解决方法。
[注意:我知道更改代码以便从HKLM读取和写入,而不是使用HKCU可能是最好的解决方案,但不适合我。因为最近它已从HKLM更改为另一个大问题而且不能还原。]
答案 0 :(得分:0)
现在,当我使用管理权限安装它时,
您如何实际开始安装?您是否在MSI上有一个EXE包装器,并使用“以管理员身份运行”命令启动它?那个包装器在安装过程中启动了MSI吗?
通常,如果通过提升的进程(无论是EXE包装器还是提升的cmd.exe)启动MSI,则每用户数据(注册表和文件)将重定向到新用户的位置(即管理员,现在安装程序正在运行)。因此,您的注册表项也应该在管理员的HKCU配置单元下创建,并且您的应用程序应该在以管理员身份启动时找到它们。
作为一个侧面讨论,并不是真的建议从HKCU获得一个应用程序加载条目,但是直接升级它会让事情变得混乱。如果您希望您的应用程序以管理员身份运行,那么您应该按机器安装它并使用相应的文件和注册表位置。让你们切换到每用户安装的错误是什么? (也许我们可以帮助提供更好的解决方案)