如何从另一个NSIS安装程序中执行NSIS卸载程序并等待它完成?

use*_*696 11 nsis

我有一个安装程序,一个已编译的NSIS脚本,它首先检查我的应用程序的另一个版本是否在系统上运行.如果存在另一个实例,则它首先触发静默卸载,然后继续安装新的intance.

我使用ExecWait在静默模式下触发unistaller,但我的主安装程序进程不等待并继续安装过程.

如何强制主安装程序等待静默卸载首先完成?

And*_*ers 12

您需要使用特殊的卸载程序参数(原因是卸载程序通常需要能够自行删除)

ExecWait '"$INSTDIR\uninstaller.exe" /S _?=$INSTDIR'
Run Code Online (Sandbox Code Playgroud)

  • +1:我认为,这不能解决问题,但对于小型应用程序仍然有效。因此,+ 1为解决方法:-)。实际上,ExecWait仍然不等待卸载程序的结束,但现在卸载程序在后台静默(/ S)执行。如果卸载程序花费很长时间,它将卸载当前安装的数据。因此,卸载程序和安装程序将并行运行。所以要注意! (2认同)

vik*_*sia 7

它不仅仅是关于"ExecWait".它也是关于"_?",一种特殊的卸载程序指令.实际上,在卸载期间,uninstaller.exe被复制到临时目录,然后从那里执行.

从temp目录复制和调用新卸载程序的步骤可能很快,并且调用将立即返回,而不会实际等待卸载程序完成.

通过使用 "_?" 您告诉NSIS从同一个地方而不是从临时目录运行卸载程序的指令.

除了"_?"之外还使用"ExecWait" 你告诉NSIS等待"卸载程序"进程完成然后返回.这样您就可以实现所需.

有关更多信息,请参阅http://nsis.sourceforge.net/Docs/Chapter3.html#3.2.2.