2013-10-26 64 views
5

我們有一個使用ClickOnce部署的市場中的消費者應用程序。 ClickOnce隨着時間的推移已經出現了各種問題,其中大部分都已經解決,但總是後悔沒有用簡單的MSI安裝程序。特別是,我們希望能夠提供適當的離線安裝(從盒裝副本)以及更好的多語言安裝選項。 我們剛剛更新了一個AnyCPU版本的測試版,最終得到了一些舊的32位dll依賴關係(之前你問 - 是的,我們的應用程序可以真正從內存地址空間的增加中受益,我們收穫了很多數據)。現在當然我們意識到,從x86到AnyCPU不適用於ClickOnce,因此它似乎是切換到另一種安裝技術的理想時間。從ClickOnce轉移到MSI部署的策略

所以問題在於:我們希望從現有的ClickOnce安裝中自動升級到新的安裝程序。我們也非常想保留用戶設置(.config)文件。如果我們做不到,這不算是一筆交易破產,但如果我們不這樣做,會激怒很多用戶。

所以很粗糙Gameplan的是這樣的:

創建應用程序的新版本,並通過ClickOnce的部署。這個新版本基本上是MSI安裝程序的前端。它以某種方式抓取現有的用戶設置,啓動新安裝程序的下載並調用它。然後它將現有設置複製到新的應用程序目錄。然後卸載它自己(本身就是之前的ClickOnce,安裝該應用程序)。

原則上我認爲這可以工作,但我不確定如何去做。特別是將用戶設置移動到新的應用程序,並在最後自行卸載。

如果任何人有任何提示,或已經經歷了類似的過程,我會非常渴望聽到它。

應用是C#.NET目標4

感謝, 馬特

回答

0

具有以下特點創建MSI版本:從ClickOnce的安裝

  • 抓取應用程序設置等如果它是當前用戶的msi版本的第一個開始,請檢查是否有ClickOnce版本並複製/遷移設置f在那裏。我不會嘗試做相反的方式,並將ClickOnce的設置推送到msi,因爲(1)可能有多個ClickOnce安裝具有不同的設置,您可能需要複製所有這些設置,(2)您必須將遷移邏輯到舊版本(可能需要更改爲與將來的msi安裝版本兼容)。 然而,理想的方法是繼續使用應用程序設置。如果它們位於用戶配置文件的某個位置(ClickOnce安裝外部),則應用程序的安裝方式應該沒有關係。
  • 檢測ClickOnce版本,提供用戶卸載它。 ClickOnce版本爲每個用戶安裝一次,而msi版本可以爲所有用戶安裝。如果您從ClickOnce版本開始卸載,則只能卸載一個潛在的幾個ClickOnce安裝。如果按照此處所述進行操作,則每次用戶都會提醒他在啓動應用程序後(卸載ClickOnce msi版本)卸載他的ClickOnce版本。

創建一個新的ClickOnce版本,它檢測msi安裝的版本。

  • 如果沒有安裝MSI版本,講述了新安裝的用戶,並提供他下載並運行新的安裝程序還是後來我不會刪除所有其他功能。這對用戶來說可能是一個非常邪惡的驚喜。您應該讓用戶有可能推遲升級並使用現有版本一段時間。請記住,用戶很可能不需要管理員權限來更新ClickOnce安裝版本,但需要管理員權限才能安裝msi。
  • 如果已安裝,請立即啓動msi安裝版本並關閉ClickOnce版本。不太嚴格的版本只會通知用戶。但是,我寧願強制用戶在安裝後使用較新的版本。否則,您可能在工作目錄/應用程序設置中存在兼容性問題(當然取決於您的應用程序的確切結構)。