Installation NSIS VPatch找不到注册表值
我在修补我的应用程序时遇到问题。 使用NSIS编写的安装程序安装了我的应用程序。已将安装路径保存在注册表中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
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位应用程序写入的密钥,这是正常的。