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

如何从另一个NSIS安装程序中执行NSIS卸载程序并等待其完成?,nsis,Nsis,我有一个安装程序,一个编译过的NSIS脚本,它首先检查我的应用程序的另一个版本是否在系统上运行。如果存在另一个实例,则它首先触发静默卸载,然后继续安装新的intance 我使用ExecWait在静默模式下触发unistaller,但我的主安装过程不等待,而是继续安装过程 如何强制主安装程序先等待静默卸载完成?您需要使用一个特殊的卸载程序(原因是卸载程序通常需要能够删除自身) 这不仅仅是“执行等待”。它还涉及到一个特殊的卸载程序指令“10;”。 实际上,在卸载过程中,uninstall.exe被复

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

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


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

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

这不仅仅是“执行等待”。它还涉及到一个特殊的卸载程序指令“10;”。 实际上,在卸载过程中,uninstall.exe被复制到一个临时目录,然后从那里执行

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

通过使用“?”指令,您可以告诉NSIS从同一位置而不是从临时目录运行卸载程序

通过在“\ux?”之外使用“ExecWait”,您可以告诉NSIS等待“卸载程序”进程完成,然后返回。这样你就能实现你所需要的


有关更多信息,请参阅。

+1:我认为,这并不能回答问题,但对小型应用程序仍然有效。因此,解决方法为+1:-)。实际上,ExecWait仍然不等待卸载程序的结束,但卸载程序现在在后台以静默方式(/S)执行。如果卸载程序需要很长时间,它也会卸载当前安装的数据。因此,卸载程序和安装程序将并行工作。所以请注意@瓦伦丁:什么使你认为ExecWait不等待?它没有WaitForSingleObject(hChildProcess,无限)+有关如何在
.onInit
函数上实现此功能的信息,请参见。@ValentinHeinitz最近我遇到了这个问题。我花了一段时间才弄清楚到底发生了什么,起初我以为是杀毒软件我已经测试过了,在我的情况下,它不会等待uinstaller,而是立即返回。
ExecWait '"$INSTDIR\uninstaller.exe" /S _?=$INSTDIR'