2011-01-13 133 views
9

我有一個安裝程序,一個編譯好的NSIS腳本,它首先檢查我的應用程序的另一個版本是否在系統上運行。如果存在另一個實例,則首先觸發靜默卸載,然後繼續安裝新的實例。如何從另一個NSIS安裝程序中執行NSIS卸載程序並等待它完成?

我使用ExecWait在靜默模式下觸發unistaller,但我的主安裝程序進程不會等待並繼續進行安裝過程。

如何強制主安裝程序首先等待靜默卸載?

回答

11

有一個特殊的卸載parameter你需要使用(這樣做的原因是,通常情況下,卸載程序需要能夠刪除自身)

ExecWait '"$INSTDIR\uninstaller.exe" /S _?=$INSTDIR' 
+1

+1:我認爲,這並不回答這個問題,對於小應用程序來說無論如何都適用。因此,+1解決方法:-)。實際上,ExecWait仍然不會等待卸載程序的結束,但卸載程序現在在後臺以靜默方式執行(/ S)。如果卸載程序需要很長時間,它也會卸載當前安裝的數據。因此,卸載程序和安裝程序可以並行工作。所以要注意! – 2011-02-15 16:30:54

6

這不只是關於「ExecWait」。這也是關於「_?」,一個特殊的卸載程序指令。 實際上,在卸載過程中,uninstaller.exe被複制到一個臨時目錄,然後從那裏執行。

從臨時目錄複製和調用新的卸載程序的這一步可能會很快,並且調用會立即回來,而實際上並未等待卸載程序完成。

通過使用「_?」您告訴NSIS從同一地點運行卸載程序,而不是從臨時目錄運行。

通過除「_?」之外還使用「ExecWait」你告訴NSIS等待「卸載程序」進程完成並返回。這樣你就可以實現你所需要的。

參考http://nsis.sourceforge.net/Docs/Chapter3.html#3.2.2欲知更多信息。