簡體   English   中英

如何執行另一個NSIS安裝程序並等待它完成?

[英]How to execute another NSIS installer and wait for it to finish?

我正在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,但是沒有一個等待真正的安裝程序,只是為了完成第一個進程。

首先,我從未見過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 :)

發現這個問題是因為我遇到了類似的問題。 在我的NSIS安裝程序中,我正在下載Microsoft Visual Studio exe文件,並嘗試首先安裝它(以獲取一些依賴dll文件)。 但是,這從未奏效:

ExecWait "$TEMP\vcredist_x86.exe"

它只是跳過了 - 我懷疑是因為子進程的問題(可能?MS安裝程序是交互式的並且會要求用戶接受許可證)。 我最后使用ExecShellWait

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

然后我的安裝程序將正確等待第三方安裝程序完成,然后再繼續。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM