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

时间:2010-10-07 19:47:21

标签: installer nsis

我正在NSIS中编写一个安装程序,它是使用NSIS创建的另一个安装程序的包装器。 内部安装程序不是我的。它是使用BioWare Installer 1.03(NSIS 2.34)创建的。它可能会以某种方式被破坏,但我不能修改它!我的安装程序所做的是它只是修改了一些注册表值(否则“内部”安装程序将无法运行),然后执行安装程序,然后覆盖一些文件,然后恢复以前的注册表值。

我的问题:我不知道如何实际等待“内部”安装程序完成!这是因为安装程序首先解压缩它的内容并创建一个新进程,这是真正的安装程序。一旦第一个进程(解包)完成,代码就会执行。等待在这里至关重要,因为我需要覆盖一些文件。

我读过这个:http://nsis.sourceforge.net/When_I_use_ExecWait,_it_doesn't_wait,但我找不到NSIS安装程序的任何开关。

我已经尝试过ExecWait和nsExec :: Exec,但是没有一个等待真正的安装程序,只是为了完成第一个进程。

2 个答案:

答案 0 :(得分:1)

首先,我从未见过ExecWait失败,但它只会等待子进程,而不是那个子进程的子进程。因此,链中的每个过程都需要等待它的孩子。如果“中间”流程中断,请尝试http://nsis.sourceforge.net/ExecWait_and_waiting_for_child_processes_with_Job_Objects

对于ExecWait,树看起来像:

  • NSIS1.exe:ExecWait NSIS2.exe
    • NSIS2.exe:ExecWait RealSetup.exe
      • RealSetup.exe:...

你的描述有点不清楚,你能证实我有一般的想法吗?

如果找不到NSIS的开关,则表示您没有RTFM:)

答案 1 :(得分:-1)

发现这个问题是因为我遇到了类似的问题。在我的NSIS安装程序中,我正在下载Microsoft Visual Studio exe文件,并尝试首先安装它(以获取一些依赖dll文件)。然而,这从未奏效:

ExecWait "$TEMP\vcredist_x86.exe"

它刚刚跳过 - 我怀疑是因为子进程的问题(可能?MS安装程序是交互式的并且会要求用户接受许可证)。我最后使用ExecShellWait代替:

ExecWaitShell "open" "$TEMP\vcredist_x86.exe"

然后我的安装程序会正确等待第三方安装程序完成,然后继续。