2012-04-11 65 views
3

簡而言之,您將如何設計支持直接可靠自動更新的應用程序?自動更新軟件的設計

我感興趣的是它如何被切斷以及涉及的各種操作。

編輯:這是鏈接到這個問題:Self-destructing application

+3

通過Java Web Start部署? – assylias 2012-04-11 15:49:17

+1

正如@assylias [JWS]所提及的(http://stackoverflow.com/tags/java-web-start/info)是部署富客戶端桌面應用程序的明顯選擇。如果應用程序。不是富客戶端桌面應用程序,您需要更具體。 – 2012-04-11 15:51:53

+1

哦,順便說一句 - 現在我記得你[最後一個問題](http://stackoverflow.com/questions/10107989/self-destructing-application)。 JWS幾乎是你可以用來部署'自毀應用程序'的最差的技術。您不僅無法控制Jars的下載位置,甚至無法控制JWS應用程序。無法確定該位置在哪裏。 ;) – 2012-04-11 15:55:10

回答

5

關注,需要加以處理:

  • 如果不更新的應用程序是本身被更新,重啓是將需要執行,或者需要執行存根以將文件移動到位(以避免文件使用中的錯誤)。

  • 無論您要通信的服務是wi通過Web請求檢索文件需要知道當前正在運行的已安裝軟件包的版本。它會動態構建文件URL列表,甚至可以壓縮文件並將其放在客戶端的單個URL中。否則,讓客戶端遍歷URL列表,拉取每個文件。每個URL都將與一個操作相關聯,如「複製」或「執行」。

  • 處理每個檢索到的文件並將其安裝到客戶端。

  • 更新需要是原子的(如果操作的任何部分失敗,則可以回滾)。您不希望處於部分狀態。

3

Java網絡啓動協議在部署自動更新軟件方面做得非常出色。本網站上的一些人報告了它的問題,但這可能是由於使用舊版本的Java或未正確設置JNLP文件。我發現它可以在Mac和Windows以及工作的個人電腦上工作,無需以管理員身份登錄,我可以有效地「安裝」我的軟件。從用戶的持續性來看,就像我給了她一個新的桌面應用程序。桌面上有一個程序圖標,我的程序保存的文件與它相關聯 - windows爲它們提供了正確的圖標,當你雙擊它們時,它們就會打開。但是每次她運行該程序時,JNLP都會首先檢查本地存儲的JAR文件與服務器上的內容,並且如果她的文件比我的服務器上的文件更舊,則會更新軟件。這些程序的啓動速度與原生Windows應用程序一樣快,除了第一次下載所有內容時。

我們使程序自毀,這裏有兩種選擇:

  1. 更改您罈子服務器上的文件是短期的和無用的。用戶啓動程序並進行更新,然後他們看到一個對話框,告訴他們該程序不再可用。您也可以通過這種方式禁用功能。但這會一次影響所有用戶。您可以創建多個不同的JNLP文件,每個文件針對不同類別的用戶,併爲您的應用程序提供相同的時間線,甚至可以讓服務生成JNLP文件。但是禁用它的控件仍然會來自您更改服務器上的罐子。

  2. 當程序啓動時,它首先聯繫一個web服務來驗證程序是否仍然運行。您可以創建一個數據庫表,將您的用戶與現在可以使用的功能相關聯。如果你的用戶沒有註冊,你需要以某種方式爲他們創建一個id,當他們第一次運行該程序時,將它放在db表中並使用首選項api將其存儲在客戶端的計算機上。

如果您不熟悉使用JNLP來autonate更新,這裏是一些背景知識,以幫助您入門:

JNLP文件是描述您的應用程序存儲在網上和一個XML文件它需要運行哪些JAR文件。應用程序的各種屬性也被指定,如啓動畫面,桌面圖標,更新風格(總是詢問,只是在沒有提示的情況下進行提升,在後臺更新)以及與程序關聯的文件。

Read the JNLP developer guide瞭解如何使其工作的詳細實例。

你也可以在網上看到很多例子。在Chrome瀏覽器中,JNLP文件的默認行爲是保存它,在其他瀏覽器中,您可能需要右鍵單擊並另存爲,但只有在存在與文件的直接鏈接而不是一個花哨的JavaScript按鈕時才起作用。然後你可以用你喜歡的文本編輯器打開JNLP文件作爲例子。
The swing tutorials使用JNLP文件來演示代碼。