我正在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,但是没有一个等待真正的安装程序,只是为了完成第一个进程。
答案 0 :(得分:1)
首先,我从未见过ExecWait失败,但它只会等待子进程,而不是那个子进程的子进程。因此,链中的每个过程都需要等待它的孩子。如果“中间”流程中断,请尝试http://nsis.sourceforge.net/ExecWait_and_waiting_for_child_processes_with_Job_Objects
对于ExecWait,树看起来像:
你的描述有点不清楚,你能证实我有一般的想法吗?
如果找不到NSIS的开关,则表示您没有RTFM:)
答案 1 :(得分:-1)
发现这个问题是因为我遇到了类似的问题。在我的NSIS安装程序中,我正在下载Microsoft Visual Studio exe
文件,并尝试首先安装它(以获取一些依赖dll
文件)。然而,这从未奏效:
ExecWait "$TEMP\vcredist_x86.exe"
它刚刚跳过 - 我怀疑是因为子进程的问题(可能?MS安装程序是交互式的并且会要求用户接受许可证)。我最后使用ExecShellWait
代替:
ExecWaitShell "open" "$TEMP\vcredist_x86.exe"
然后我的安装程序会正确等待第三方安装程序完成,然后继续。