如何从另一个NSIS安装程序中执行NSIS卸载程序并等待它完成?
问题描述:
我有一个安装程序,一个编译好的NSIS脚本,它首先检查我的应用程序的另一个版本是否在系统上运行。如果存在另一个实例,则首先触发静默卸载,然后继续安装新的实例。如何从另一个NSIS安装程序中执行NSIS卸载程序并等待它完成?
我使用ExecWait在静默模式下触发unistaller,但我的主安装程序进程不会等待并继续进行安装过程。
如何强制主安装程序首先等待静默卸载?
答
有一个特殊的卸载parameter你需要使用(这样做的原因是,通常情况下,卸载程序需要能够删除自身)
ExecWait '"$INSTDIR\uninstaller.exe" /S _?=$INSTDIR'
答
这不只是关于“ExecWait”。这也是关于“_?”,一个特殊的卸载程序指令。 实际上,在卸载过程中,uninstaller.exe被复制到一个临时目录,然后从那里执行。
从临时目录复制和调用新的卸载程序的这一步可能会很快,并且调用会立即回来,而实际上并未等待卸载程序完成。
通过使用“_?”您告诉NSIS从同一地点运行卸载程序,而不是从临时目录运行。
通过除“_?”之外还使用“ExecWait”你告诉NSIS等待“卸载程序”进程完成并返回。这样你就可以实现你所需要的。
参考http://nsis.sourceforge.net/Docs/Chapter3.html#3.2.2欲知更多信息。
+1:我认为,这并不回答这个问题,对于小应用程序来说无论如何都适用。因此,+1解决方法:-)。实际上,ExecWait仍然不会等待卸载程序的结束,但卸载程序现在在后台以静默方式执行(/ S)。如果卸载程序需要很长时间,它也会卸载当前安装的数据。因此,卸载程序和安装程序可以并行工作。所以要注意! – 2011-02-15 16:30:54