NSIS _?= $ INSTDIR开启ExecWait会在重启时删除uninstaller.exe

时间:2012-05-03 10:17:14

标签: nsis

我有 NSIS安装程序,它会调用卸载程序来卸载旧版本。

ExecWait $INSTDIR\uninstall.exe /S _?=$INSTDIR_?开关用于使安装程序等到卸载完成。

它确实等到卸载完成。但是当我重新启动计算机时,uninstall.exe下没有$INSTDIR

卸载程序部分包含使用$INSTDIR开关删除/REBOOTOK下的某些子目录的命令。

例如:RmDir /r /REBOOTOK $INSTDIR\client

这是否会导致在机器重启时删除uninstall.exe?

2 个答案:

答案 0 :(得分:0)

/ REBOOTOK的重点,删除正在使用的文件。但RmDir /r /REBOOTOK $INSTDIR\client不应删除$INSTDIR\uninstall.exe,您确定没有RmDir /r /REBOOTOK $INSTDIR来电吗?

使用/ REBOOTOK这可能不是一个好主意,无论你如何看待它。一旦用户重新启动,$ INSTDIR \ client中的所有文件都将被删除(来自旧安装的文件和新的全新安装)

请引用你的路径:

  • ExecWait '"$INSTDIR\uninstall.exe" /S _?=$INSTDIR'
  • RmDir /r /REBOOTOK "$INSTDIR\client"

答案 1 :(得分:0)

关于部署卸载程序的部分,此ExecWait语句的位置是什么?

卸载程序可能会自行删除(或尝试)并且它与“新卸载程序”之间存在冲突,这与它自行删除的方式有关:因为执行程序在执行过程中无法删除,而是标记本身在下次启动时删除(如果使用/REBOOTOK选项)。之后,您正在部署“新的卸载程序”,如果它具有相同的名称,则会在后续引导时将其删除。

您可以尝试使用VIAddVersionKey语句来定义与前者不同的新安装程序的版本。然后安装后,检查它是新的还是前的unistaller。

如果您有一个HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations multi_sz值,可以包含卸载程序的名称(如果在下次启动时标记为删除),请查看注册表。