Installation NSIS VPatch找不到注册表值

Installation NSIS VPatch找不到注册表值,installation,nsis,patch,Installation,Nsis,Patch,我在修补我的应用程序时遇到问题。 使用NSIS编写的安装程序安装了我的应用程序。已将安装路径保存在注册表中 WriteRegStr HKCU“软件\应用”“安装路径”$InstDir 这是可行的,安装后我可以在注册表GUI中找到键和值 在我的补丁安装程序中,我使用此功能查找安装路径: !include "VPatchLib.nsh" !include x64.nsh !include LogicLib.nsh ; Show details ShowInstDetails show Funct

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

WriteRegStr HKCU“软件\应用”“安装路径”$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,我输入管理员密码

我真的很感谢你的帮助

谢谢, 安德烈亚斯

编辑:

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


此外,当im在管理员上运行时,此功能也有效,但在非管理员用户上不起作用。

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

通常当你找不到你写的东西时,是因为你没有使用正确的注册表视图。试着看看你写的是哪把钥匙,读的是哪把钥匙


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

为什么您谈论的是VPatch,而只是显示NSIS代码?你在哪里写的值?把它放到上下文中。这个问题与VPatch无关(我想),但我确实在脚本中使用了VPatch作为插件。补丁部分是可变的,似乎对管理员用户有效,但在常规用户配置文件中,此函数无法读取注册表。我正在初始安装中写入该值。然后,当打补丁时,我试着阅读它。管理员vs用户是UAC的问题,我会更新我的答案。谢谢,我会检查它。我(对我)有一些奇怪的行为。使用Process Monitor,我找到了实际写入InstallPath的路径
HKU\S-1-5-21-1880166722-1511875134-2720093845-1002\Software\APP\(默认)
,根据您的说法,可能是指管理员用户。奇怪的是,当我查看注册表GUI(在用户配置文件上)时,我请求将其写入的路径:
HKCU\Software\APP
,也具有该值。对此有何解释?我将研究不在HKCU中写入值,但HKLM.HKCU是HKU中一个键的符号链接。S-1。。。字符串是用户SID。管理员用户,因为安装程序已提升,对吗?现在我试着用上面更新的问题中的函数来阅读注册表。Process Monitor向我显示它正在以下路径中搜索:
HKLM\Software\WOW6432Node\APP
。这正常吗?我需要更换我的安装程序,这需要一点时间,但我明天会回来!默认情况下,WOW6432Node是64位Windows上32位应用程序写入的密钥,这是正常的。