2011-11-08 32 views
2

我正在使用C#爲我正在進行的項目安裝和配置應用程序,並且我很想知道內部組織一切的最佳方法是什麼。安裝程序嚮導的結構

要求:

  • 部署單一的可執行文件,捆綁它沒有其他文件。
  • 必須支持每個面板上的自定義配置步驟,這些步驟最終生成了XML配置文件。
  • 某些步驟可能會根據安裝程序流程中所做的某些選擇而被跳過。
  • 必須支持基於從我的一個庫中的類反饋的信息的動態配置屏幕。

這是我的原型的描述:

  • 大形式與一羣面板控制的,該向導的每一個代表一個「屏幕」。每個都被適當地命名。
  • 每個「屏幕」的一個類,派生自我定義的基本類型。當某些事件發生時,我調用它的具體方法(例如EnterBack,Forward)。
  • 狀態存儲爲Dictionary<string,object>,將其傳遞給每個屏幕。最後的屏幕(實際的「安裝...」屏幕)從此讀取配置並將其轉儲到XML文件中。
  • 每個屏幕的代碼負責處理「Next」和「Prev」按鈕,因此我可以根據當前屏幕中的設置來控制它跳到的位置。
  • 許多模塊存儲在我的庫中,提供有關需要採取的額外配置步驟的信息。我通過反思和自動UI生成來實現這一點。
  • 資產存儲在可執行文件的資源中。

我不想使用通用的安裝程序包(例如InstallShield),因爲邏輯完全是自定義的,並且需要調用我的一個類庫。我想知道的是 - 我是以一種非常迂迴的方式來設定它的嗎?是否有更簡單或更標準的嚮導式應用程序的方式?

+0

InstallShield,WiX,NSIS - 所有這些安裝程序都支持調用自定義庫。他們也能夠處理自定義安裝步驟和任何你可能擁有的瘋狂邏輯。 –

回答

4

這裏的答案很簡單:

一個商業工具是適合你需要的東西,因爲它同時支持自定義安裝用戶界面和動態的XML文件。其他任何事情都需要大量的學習和努力。

和長解釋:

自定義安裝UI不是一件容易的事。 Windows Installer提供了內置的對話框和控件,所以它通常是最好的解決方案。你也可以嘗試一個專有的安裝引擎,但你需要學習它。

您還試圖通過自定義代碼和類來控制所有內容,這也是錯誤的方法。大多數安裝創作工具都提供對處理安裝UI和XML文件的直接支持。爲什麼要重新發明輪子?

所以你基本上需要找到最適合你的安裝創作工具。以下是一個通用清單: http://en.wikipedia.org/wiki/List_of_installation_software

這些工具是基於MSI的或專有的。我個人更喜歡Windows Installer(MSI軟件包)。

試圖用自定義代碼實現所有的任務是不值得的。

-1

用於部署的單個可執行文件,沒有與其捆綁的其他文件。

的一些你感興趣的,這可能:http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx

+0

不是我想要的。我可以輕鬆地將這些DLL捆綁到資源中,並將lib安裝到我的安裝程序項目的二進制文件中 - 這沒有問題。我感興趣的是安裝程序嚮導的實際體系結構,以及如何最好地設置它。 – Polynomial

0

使用InstallShield或MSI安裝程序。認真。除了能夠支持各種自定義邏輯(包括您指定的代碼)之外,通用安裝程序嚮導還可以執行您甚至沒有想過的操作,例如,在程序和功能中列出已安裝的應用程序,執行修復安裝/卸載。

隨着您所看到的自定義邏輯級別的提高,我將分發最新的InstallShield安裝程序生成器; VS安裝項目構建成一個非常簡單的對話框。

編輯:夠公平的,一直在那個位置之前。

我仍然強烈建議使用任何通用的安裝程序工具,如VS的安裝項目,基於上述原因;安裝軟件包可以完成你在設計中沒有想到的任何事情,而且你可以免費獲得所有這些。

而不是把這個邏輯定製在安裝程序中的XML配置文件,如何將它放入可執行文件,作爲用戶在安裝後啓動應用程序時看到的「運行一次」配置嚮導?它不應該讓你的用戶過分厭倦,如果實際應用程序也是一個WinForms應用程序(即使不是這樣;你可以將配置器編譯到不同的應用程序中並讓你的主應用程序啓動如果配置器沒有XML文件)。

+0

不幸的是,我的預算爲零,而InstallShield(以及其他任何花費金錢)的標準是非常昂貴的。 – Polynomial

1

在Windows上安裝軟件的唯一正確方法是使用Windows Installer。簡化Windows安裝程序基於安裝包(數據庫文件)的概念,該安裝包可以以事務方式添加或從系統中刪除。

如果您編寫自己的安裝邏輯,您將無法參與交易處理軟件安裝。如果您的卸載程序被刪除,則用戶無法卸載您的軟件。此外,Windows安裝程序知道很多你可能沒有意識到的Windows怪癖。

Windows安裝程序提供了一個cryptic API創建包,但你也可以使用開放源碼WiX toolset這是非常強大的或任何商業安裝程序如InstallShield

如果您決定採用Windows Installer方式,應儘量避免自定義操作。自定義操作與自定義安裝程序存在相同的「事務回滾」問題。您在DLL中創建自定義操作回滾/卸載的代碼,並且如果該DLL丟失,則Windows Installer無法撤消您的自定義操作。

Windows Installer實際上相當強大。您沒有提供任何有關您需要執行的「自定義內容」的具體信息,但是Windows Installer可能已經有一個表格了?

+0

「自定義的東西」基本上是使用反射來列出從我的庫中的特定基類派生的類,然後調用每個類的自定義配置步驟。必須向用戶呈現配置問題(如Apache安裝程序/配置程序的工作方式),然後用它來生成一個特殊的config.xml文件,該文件還包含一些自動生成的(但對每個機器不同且隨機)調度程序時序某些工作的信息。問題是,通用安裝程序不能讓我提供真正的自定義用戶界面,例如一步列出所有已安裝的服務。 – Polynomial

+0

對我來說,這聽起來像你正在嘗試創建一個配置工具,而不是一個安裝程序?如果這是真的,我可能應該刪除我的答案,因爲它不適用。 –

+0

它是兩個。配置需要在安裝時進行。 – Polynomial

相關問題