2012-04-07 134 views
8

我正在使用WiX使MSI安裝程序調用另一個MSI安裝程序。MSI安裝程序使用WiX以靜默模式調用另一個MSI安裝程序

  • 我可以在UILevel = 5(完整用戶界面)模式下解決這種情況。我的解決方案是將一個CustomAction添加到調用另一個MSI的UISequence表中。它不會得到錯誤代碼1500:「另一個安裝已經在進行中......」
  • 但是在slient模式下,UILevel = 2,我不能這樣做,因爲它只在ExecuteSequence中運行CustomAction。 如何以靜默模式運行我的MSI並調用另一個MSI安裝程序?

回答

1

嚴格來說,MSI文件是交易安裝程序,所以它們一次只能出現一個。

微軟用合併模塊來解決這個問題,這些模塊和MSI一樣,但是用於嵌入MSI文件。

想要嵌入MSI的任何機會都可以更改爲MSM文件?

+0

我以爲這個解決方案。這意味着兒童微星嵌入父MSI的數據庫。但是我不能使用這個解決方案,因爲我的子MSI可以在編譯時間後更改,父MSI只能通過CustomAction調用它。 – Klaus 2012-04-07 07:30:14

-1

您可以嘗試使用延遲異步自定義操作啓動第二個MSI,無需在InstallFinalize標準操作之後返回代碼檢查。這樣,自定義操作將在第一個安裝完成時啓動。

+1

如果我們安排此操作,則會發生錯誤。錯誤2762:無法安排操作。該操作必須安排在InstallInitialize和InstallFinalize之間。 – Klaus 2012-04-07 15:33:03

+0

我忘了延遲的自定義操作無法安排在InstallFinalize後。但是,您可以在InstallExecute之後立即嘗試。 – 2012-04-07 17:38:01

7

將兩個MSI都安裝在wix 3.6中包含的Burn bootstrapper中。

+1

我明白「Burn bootstrapper」會解決先決條件(NET 35,Java ...)問題。它適合與「Msi通過自定義操作調用另一個msi」問題?無論如何,這只是我現在的方式。希望它可以做到!謝謝先生! – Klaus 2012-04-08 05:16:08

+0

@klaus:從我在上面的回答中給出的鏈接:「捆綁還允許將非常大的應用程序或應用程序套件分解爲更小的邏輯安裝包,同時仍向最終用戶呈現單個產品。」 – 2012-04-08 06:04:21