You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 22:31:15