是否可以將ClickOnce功能引入到現有應用程序中?升級現有應用程序以包含ClickOnce
這種情況是:版本1.0已經安裝在客戶端。我想向他們發送一個新的安裝程序包,它將升級到1.1,它具有ClickOnce功能,從而使未來的升級「毫不費力」。
除此之外,有沒有其他解決方案來解決這類問題?
P.S .:原始應用程序是用Visual Studio 2005(即.NET 2.0)開發的。我現在使用Visual Studio 2008。
是否可以將ClickOnce功能引入到現有應用程序中?升級現有應用程序以包含ClickOnce
這種情況是:版本1.0已經安裝在客戶端。我想向他們發送一個新的安裝程序包,它將升級到1.1,它具有ClickOnce功能,從而使未來的升級「毫不費力」。
除此之外,有沒有其他解決方案來解決這類問題?
P.S .:原始應用程序是用Visual Studio 2005(即.NET 2.0)開發的。我現在使用Visual Studio 2008。
不,使用標準的ClickOnce部署方案是不可能的。
ClickOnce是客戶端的沙盒安裝。它不會知道已安裝的版本1.0。它只是檢查GUID是否已經通過ClickOnce安裝,如果是,請更新它,但前提是通過ClickOnce部署了以前的版本。
在你的情況下,如果用戶安裝了版本1.1,兩個版本將並排安裝。版本1.0將不會更新,因爲ClickOnce不知道有關聯,因爲它是通過不同的方法部署的。如果他們不再需要版本1.0,他們需要手動刪除它。一旦你通過ClickOnce部署了1.1版本,後續的更新將會正常工作。
不要將ClickOnce看作是「包括」的東西,將其視爲部署方法。
或者:
我要澄清,你要尋找什麼是不可能與標準的ClickOnce部署。但是,您提到您將向他們發送初始安裝文件。在這種情況下,你可能有一個解決方法這是可能的:
對於後續更新,只需將用戶指向「純」ClickOnce安裝程序包,並且更新應該正常工作。
我認爲在這種情況下,「最簡單」的解決方案就是使用ClickOnce 1.1版本的部署,並且作爲應用程序新版本的一部分,它有一個默認配置文件,其中包含某種初始運行標誌當用戶第一次運行並看到第一次運行標誌時,它會查找以前的版本,複製任何現有的配置設置,然後自動卸載以前的版本。
這將需要您的一些編程,但這是我在之前的工作中解決的解決方案,以執行類似的任務來升級實用程序應用程序以使用之前沒有的Clickonce。
我所知道的最好的辦法是給他們一個安裝程序:
有了這個,你會有一個合理的升級經驗,從那裏出來,ClickOnce可以自己處理升級。
確保在您的客戶環境中非常全面地測試您的ClickOnce部署。我在此省略細節,但ClickOnce存在許多問題。我一直支持3.5年的ClickOnce應用程序,並遇到許多有關清單的問題,必須手動刪除沙盒存儲文件夾,以便正確安裝更新等。 - 如果您在線搜索ClickOnce問題,您會發現很多MSDN論壇和其他地方很少出現問題,其中許多MS自從Visual Studio 2005.之後似乎並未解決。
此外,請注意ClickOnce之前的潛在問題。 NET 3.5 SP1。如果客戶端計算機識別的CA中沒有自己的軟件部署證書,則Visual Studio將使用一個「臨時」證書(* .pfx),該證書將在創建後一年過期。此後,後續更新版本可能無法安裝,並會向用戶顯示有關證書過期的可怕消息。微軟在.NET 3.5 SP1中解決了這個問題,但是你必須仔細閱讀發行說明以找到不再需要臨時或永久證書的評論。因此 - 如果您沒有公共CA證書,並且您將支持此應用程序一段時間,請確保您使用的是.NET 3.5 SP1。
根據您的情況的複雜性,因爲你問其他的解決方案,我們結束了使用「滾你自己」的辦法,是這樣的。
每個更新的版本都會根據需要增加程序集版本。
版本包含一個自定義步驟來自動生成新的裝配版本的文件。
部署項目將版本文件複製到帶有MSI的輸出目錄。
每個已安裝的應用程序運行時,它自己的版本進行比較,以在部署文件夾的版本文件的版本。如果它們不同,請退出應用程序並啓動MSI,我們將其設置爲自動刪除較舊的應用程序版本。
這是一個「窮人的ClickOnce的」爲在沒有應用程序部署工具AVL任何(甚至不是AD應用廣告),所以我們就做了一個環境。再一次,這種方法對你來說可能不夠成熟,但對我們來說工作得很好。
祝你好運。
感謝您的詳細回覆。 ClickOnce的確聽起來像是比它更值得的麻煩......我喜歡你的本土解決方案。 – pufferfish 2009-08-02 20:37:00