installation - 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,然后我输入管理员密码。
我真的很感激任何帮助。
谢谢, 安德烈亚斯
编辑:
改变了功能,关于安德斯的回答。
此外,这在我使用管理员时有效,但不适用于非管理员用户。
解决方案
SetRegView 64
不应仅仅因为您在 64 位系统上运行而使用。只有在 A) 您正在安装 64 位应用程序时,您才应该使用它。B) 您需要读取/写入特定于 Windows 的注册表值。
通常当你找不到你写的东西是因为你没有使用正确的注册表视图。尝试Process Monitor以查看您正在写入哪个键以及您正在读取的位置。
您不应该在提升的安装程序中真正写信给 HKCU,使用 HKLM。当非管理员用户 UAC 提升时,他们最终会得到管理员 HKCU 和配置文件!
推荐阅读
- r - 非线性模型收敛
- clickhouse - 为什么 clickhouse 同时具有 WHERE 和 PREWHERE 构造?
- javascript - 在使用 AWS.DynamoDB.DocumentClient 更新第二个表之前,如何使用事务检查一个表中是否存在项目?
- python - 无法使用 Beautifulsoup 将字符串放入单行获取正文
- html - 使用处理 HTTP 和 HTTPS
- java - 返回值时出现 InvalidArgumentException
- php - 使用 htaccess 和 PHP 请求数据和重写 URL
- mysql - 给整个表的字段起别名
- ios - willEnterForegroundNotification 中的 iOS Face ID/Touch ID 锁屏冲突
- python - catplot seaborn 中的标记问题