首页 > 解决方案 > NSIS VPatch 找不到注册表值

问题描述

我在修补我的应用程序时遇到问题。使用 NSIS 编写的安装程序安装了我的应用程序。将安装路径保存在注册表中

WriteRegStr HKCU "Software\APP" "InstallPath" $InstDir

这有效,我可以在安装后在注册表 GUI 中找到键和值。

在我的补丁安装程序中,我使用这个函数来查找安装路径:

!include "VPatchLib.nsh"
!include x64.nsh
!include LogicLib.nsh

; Show details
ShowInstDetails show

Function FindInstallPath
   ClearErrors
   ReadRegStr $0 HKLM Software\APP ""
   ${If} $0 != ""
       MessageBox MB_OK "Install path: $0"
       StrCpy $INSTDIR $0
       Return
   ${Else}
       MessageBox MB_OK "Path error: '$0'"
       Quit
   ${EndIf}
FunctionEnd

找不到路径,无法应用补丁。如果我尝试读取任何其他键 fx: ReadRegStr $0 HKCU "Software\Realtek\Audio\RtkAudUService\General" "InstallPath",则会按预期返回该值。

我正在使用我自己的计算机上创建的测试用户配置文件。我的安装程序和补丁都会触发 Windows UAC,然后我输入管理员密码。

我真的很感激任何帮助。

谢谢, 安德烈亚斯

编辑:

改变了功能,关于安德斯的回答。

此外,这在我使用管理员时有效,但不适用于非管理员用户。

标签: installationnsispatch

解决方案


SetRegView 64不应仅仅因为您在 64 位系统上运行而使用。只有在 A) 您正在安装 64 位应用程序时,您才应该使用它。B) 您需要读取/写入特定于 Windows 的注册表值。

通常当你找不到你写的东西是因为你没有使用正确的注册表视图。尝试Process Monitor以查看您正在写入哪个键以及您正在读取的位置。

您不应该在提升的安装程序中真正写信给 HKCU,使用 HKLM。当非管理员用户 UAC 提升时,他们最终会得到管理员 HKCU 和配置文件!


推荐阅读