如果您使用他們的用戶界面或簡單地使用WiX風格的用戶界面,則WiX解決了這個問題。
如果您想要更豐富的UI體驗,您需要編寫自定義引導程序。過去我通過編寫一個客戶引導程序解決了這個問題,該引導程序爲用戶提供了一個統一的用戶界面,並使安裝看起來像一個單獨的包,實際上安裝是按順序運行的MSI文件的集合。
下面是我所做的一般要點:
- 引導程序是.NET託管代碼。優點:更容易編寫。缺點:某些系統沒有.NET,我必須爲我的託管引導程序安裝一個小型非託管引導程序,這個引導程序先部署.NET,然後啓動託管引導程序。
- 發現MSI文件(app.config工程...我的應用程序更復雜)。
- 的受管MSI API來讀取每個MSI文件功能列表
- 內置一個單一的「特徵選擇」嚮導創建頂級功能爲每個MSI文件,然後填充子功能,從每個讀取.NET的WinForms頁MSI文件。
- 根據功能選擇和其他選項(卸載,修復,升級等)創建MSI命令行。
- 爲「套件」安裝程序創建了卸載註冊表項,並隱藏了MSI特定的卸載密鑰,以便添加/刪除程序/程序&功能中只有一個條目。
魔鬼的細節,但它的工作,它運作良好!
編輯2010/9/3更多的音符:
這裏有一些事情,如果你採取這種方法來考慮:
- 什麼是維護模式的經驗嗎?您可能需要將系統引導程序緩存到系統中,以便在從ARP啓動時打開它。
- 如何升級和卸載?你允許升級一些微星而不是其他微星嗎?
- 如何檢測升級與維護模式?幾乎你必須掃描所有的MSI,如果這些MSI(認爲「功能」)中的任何一個已過期,那麼你將作爲升級運行,而不是維護。
- 考慮部分功能增加...您是否支持只安裝部分MSI?在這種情況下,可以升級一些並重新安裝其他場景。
- 您可能最終會爲整體套件介紹套件版本的概念。不要欺騙自己......這只是一個人/市場版本......只有MSI的問題的版本,只有這些版本才能用於確定安裝/修復/升級等。
基本上,在編寫安裝(無論是單個MSI還是組合套件安裝)時,請確保爲整個軟件生命週期佈置了所有用例。以短視的方式編寫安裝程序非常容易,然後在v2發佈時發現自己被繪成不愉快的角落。
祝你好運;)
這似乎是一個很好的方式去了解它。有關創建套件註冊表項的任何提示? – stimms 2010-09-03 17:19:23
添加/刪除程序主要由HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall中的條目構建。看看那裏的一些條目,以瞭解它的結構。您可以通過Google獲取有關如何隱藏其他應用的信息......有幾種技術。 我已經更新了我的答案,以包含一些其他注意事項,如果採取此方法,您將需要考慮。嚴重敲門的學校。 – 2010-09-03 19:31:11
您的回覆確實非常非常有幫助。感謝您抽出寶貴的時間。 – stimms 2010-09-03 20:51:53