1

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

执行等待$INSTDIR\uninstall.exe /S _?=$INSTDIR。该_?开关用于使安装程序等待卸载完成。

它确实等到卸载完成。但是当我重新启动我的机器时,uninstall.exe不存在于$INSTDIR.

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

前任 :RmDir /r /REBOOTOK $INSTDIR\client

这会导致uninstall.exe 在机器重新启动时被删除吗?

4

2 回答 2

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"
于 2012-05-03T11:28:24.403 回答
0

ExecWait关于部署卸载程序的部分,该声明的立场是什么?

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

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

如果您有一个 multi_sz 值,如果它被标记为在下次启动期间删除,则还要查看注册表,该HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations值可能包含您的卸载程序的名称。

于 2012-05-03T11:49:29.413 回答