NSIS VPatch找不到注册表值



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

WriteRegStr HKCU "SoftwareAPP" "InstallPath" $InstDir

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

在我的补丁安装程序中,我使用此功能来查找安装路径:

!include "VPatchLib.nsh"
!include x64.nsh
!include LogicLib.nsh
; Show details
ShowInstDetails show
Function FindInstallPath
ClearErrors
ReadRegStr $0 HKLM SoftwareAPP ""
${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 "SoftwareRealtekAudioRtkAudUServiceGeneral" "InstallPath",则会按预期返回该值。

我在自己的电脑上创建了一个测试用户档案。我的安装程序和补丁都会触发Windows UAC,我会输入管理员密码。

我真的很感激任何帮助。

谢谢,Andreas

编辑:

更改了函数,关于安德斯的回答。

此外,当我在管理员上时,这是有效的,但在非管理员用户上不起作用。

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

通常,当你找不到你写的东西时,那是因为你没有使用正确的注册表视图。请尝试Process Monitor查看您正在向哪个密钥写入以及在哪里读取。

您不应该在提升的安装程序中真正写入HKCU,请使用HKLM。当非管理员用户UAC提升时,他们最终会得到管理员HKCU和个人资料!

最新更新