NSIS卸载器重启误删问题:同路径同名卸载器冲突解决方案咨询
NSIS安装程序卸载旧版本后新版本卸载器被误删的问题
这是之前相关问题的后续。我正在编写NSIS安装程序,逻辑是先检查应用是否已安装,提示用户卸载旧版本后再继续安装。但现在遇到一个问题:不管卸载器是静默还是非静默运行,Windows都会在重启时删除旧卸载器。当旧卸载器和新卸载器同名且安装路径相同时,就算手动删除了旧卸载器,Windows还是会错误地把新卸载器当成旧的删掉。
相关代码示例:
; $R0 是旧卸载程序的完整路径 ReadRegStr $R0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" ; $R1 是旧版本应用的安装目录 ReadRegStr $R1 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "InstallLocation" ExecWait '$R0 /S _?=$R1' ; 静默卸载会删除新安装程序 ;ExecWait '$R0 _?=$R1' ; 非静默卸载同样会删除新安装程序 Delete $R0 ; 手动删除旧卸载器
我目前考虑了两种解决方向:
- 将旧卸载器复制到TEMP目录,从该目录运行卸载
- 运行卸载前先重命名旧卸载器
更新
卸载段代码如下:
section "uninstall" rmDir /r /REBOOTOK "$SMPROGRAMS\${APPNAME}" rmDir /r /REBOOTOK $INSTDIR DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" ; 确保Windows感知到变更 SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 sectionEnd
内容的提问来源于stack exchange,提问作者Olumide
相关产品推荐
相关产品推荐

