2012-08-14 13 views
0

我有三個基於Windows的應用程序。我需要將它們部署到單個msi文件中。前兩個文件有點類似於正確的計算機檢查,如特定的計算機名稱和登錄用戶名。我遇到的問題是如何將所有這三個應用程序部署到一個msi文件中。並且安裝是這樣的: 1:安裝窗口應用程序A 2:如果應用程序沒有正確安裝,請停止安裝並刪除應用程序B和應用程序C.但是,如果一切順利,請安裝最終的主應用程序,應用程序C.安裝多個MSI的動態Visual Studio C#

添加信息:應用程序A和應用程序B基本上有點檢查計算機的用戶名和專有名稱,然後將指定值打印到註冊表中。

欣賞提前:)

+0

嗯,問題在哪? – banging 2012-08-14 16:11:01

+0

「如何使用一次原子安裝操作來安裝多個MSI的內容?」。或者,也許,「你如何將多個應用程序部署到一個MSI?」。 – KeithS 2012-08-14 16:20:00

回答

0

如果您正在使用VS安裝項目安裝程序的幫助,這是有點難度比它必須但不是很大。

你應該做的第一件事是挑選一個「主」應用程序。該應用程序的安裝程序將由用戶調用來安裝所有三個,並將控制其他兩個。

現在,將其他兩個應用程序部署到他們的MSI文件中。這個過程相對簡單;您必須做的唯一事情是確保設置嚮導可能需要的任何自定義信息都可以使用命令行參數進行定義,並且可以以無人蔘與的方式執行安裝。 VS安裝項目允許這兩個;您必須定義嚮導中任何自定義字段的參數名稱,但假定無人蔘與功能是「免費」的。一旦構建了這些MSI,將它們添加爲要安裝到主應用程序的主應用程序目錄中的文件。

現在,您必須在主應用程序的安裝程序中定義自定義操作。這是通過創建一個從System.Configuration.Install.Installer繼承的類,使用RunInstaller屬性對其進行裝飾並將該Installer類的項目指定爲安裝程序的一組自定義操作來完成的。

在安裝程序類中,重寫OnAfterInstall,OnBeforeUninstall和OnRollback方法。在OnAfterInstall方法中,調用Process.Start以使用/ I選項調用MsiExec.exe進行安裝,傳遞第一個應用程序的MSI的路徑和名稱,並指定「/ q」選項以靜默方式執行安裝必須設置的屬性(安裝參數;路徑,安裝級別/組件,應用程序設置等)。對其他應用程序重複此操作,然後使用OnBeforeUninstall和OnRollback方法重複該過程,但指定/ x選項以卸載MSI。

完成後,您應該有一個包含其他兩個MSI的MSI,安裝後會默默安裝其他兩個,卸載時會卸載其他兩個。對於更高級的安裝控制,您可以通過檢查處理程序中的savedState字典(在修復期間,您應該修復子應用程序而不是嘗試重新安裝它們)來區分「安裝」和「修改/修復」,而您可以在安裝過程中使用組件對話框安裝其他兩個應用程序(信息將傳遞給自定義操作處理程序,也可用於選擇是將一個或兩個MSI複製到主應用程序目錄)。最後,您可以選擇重寫OnAfterCommit並刪除MSI(但是如果這樣做,您將不得不使用Windows保留的MSI副本來卸載子包,這很難找到)。

相關問題