NSIS 卸载程序不删除目录

Posted

技术标签:

【中文标题】NSIS 卸载程序不删除目录【英文标题】:NSIS Uninstaller does not delete directory 【发布时间】:2014-09-27 23:20:07 【问题描述】:

我正在为我的安装程序使用 NSIS。 当我卸载时,最后我想删除安装目录及其所有内容。 我正在使用以下代码

Delete "$INSTDIR\*.*" RMDir /r "$INSTDIR"

我注意到安装程序会删除目录中的所有文件,然后崩溃。 (我在两行之间添加了登录,它没有被调用,目录仍然存在)

这样崩溃的原因可能是什么? 我已经关闭了服务和进程,并且认为没有任何东西在使用。

谢谢

编辑: 也许是因为我正在删除 Uninstaller.exe?我尝试将ExecWait 调用到删除文件夹的批处理文件,并且在删除后它也停止工作

【问题讨论】:

您在这两行之间添加了一些日志记录,但没有打印任何内容。换句话说,你是说删除指令崩溃了?您能否提供更多详细信息,例如 NSIS 版本和 Windows 版本? 是的! Windows 7 家庭高级版 32 位。 MakeNSISW 版本是 2.3.2(这是 NSIS 版本?) 不,我们需要 NSIS 版本,运行 MakeNSIS /version(MakeNSISW 应该在主窗口的左下方显示它)。如果不是 v2.46 那么你应该升级/降级... 哦,好的,这里是:3.0b0,降级.... 【参考方案1】:

希望这可能会有所帮助。这是我的卸载程序部分的一个小sn-p。

我假设你必须删除你创建的每一个东西,所以这不是通配符解决方案。

祝你好运!

部分卸载

删除“$SMPROGRAMS\your app\Uninstall.lnk”

删除“$DESKTOP\your app.lnk”

删除“$SMPROGRAMS\your app\your app.lnk”

RMDir "$SMPROGRAMS\你的应用"

RMDir "$INSTDIR\文件夹"

RMDir "$INSTDIR"

设置自动关闭为真

部分结束

【讨论】:

【参考方案2】:

我使用此脚本卸载所有文件并使用 NSIS 删除文件夹。

Section "Uninstall"
    Delete "$INSTDIR\*.*"
    Delete "$INSTDIR\Uninstall.exe"
    DeleteRegKey /ifempty HKCU "Software\APPName"
    RMDir /r "$INSTDIR"
SectionEnd

希望这会有所帮助。

【讨论】:

【参考方案3】:

请参考官方文档: https://nsis.sourceforge.io/Reference/RMDir

您必须指定/r 标志以删除非空目录,并指定/REBOOTOK 以删除任何无法在运行时删除并将在操作系统重新启动期间删除的目录。

此外,您不能删除由SetOutPath 命令设置的当前工作目录。你需要先改变它。请参阅下面的卸载部分:

Section "Uninstall"

  Delete "$DESKTOP\$PRODUCT_NAME.lnk"
  Delete "$SMPROGRAMS\$COMPANY_NAME\$PRODUCT_NAME.lnk"
  Delete "$INSTDIR\$PRODUCT_NAME.lnk"
  RMDir "$SMPROGRAMS\$COMPANY_NAME"
  Delete "$INSTDIR\*.*"
  Delete "$INSTDIR\Uninstall.exe"
  SetOutPath "$PROGRAMFILES"
  RMDir /r /REBOOTOK "$INSTDIR"
  
  DeleteRegKey /ifempty HKCU "Software\your app name here"
  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\your app name here"
SectionEnd

【讨论】:

以上是关于NSIS 卸载程序不删除目录的主要内容,如果未能解决你的问题,请参考以下文章

NSIS 卸载程序工作目录

NSIS目录

NSIS 卸载程序权限级别

根据安装程序的 NSIS 卸载程序权限

如何用Inno编译卸载时删除整个文件夹

如何在NSIS卸载时线运行一个EXE文件?(EXE文件在卸载程序目录下)用啥代码?