2009-11-05 73 views
2

我們的軟件是沒有過正式安裝在Windows上,目前有一個更新的模型是這樣的:如何實現自動更新檢測模型

  1. 連接到互聯網

  2. 點擊更新按鈕

  3. 連接到服務器端程序

  4. 服務器端程序創建所有的MD5哈希表服務器程序目錄中的文件位於 。

  5. 客戶端程序在 客戶端程序目錄中創建所有文件的md5哈希列表。

  6. 進行比較以確定文件是否需要更新,刪除或將 添加到客戶機器,並且直到完成爲止。

嗯,我想搬到一個模式,我看到更頻繁,這些天該軟件正式安裝並像這種情況使用:

  1. 當檢測到互聯網連接,該程序將自動查詢 服務器以查看是否有更新的安裝包。

  2. 如果是這樣,詢問用戶是否想要下載新安裝。

  3. 如果否,則什麼也不做,如果是,請下載新安裝。

  4. 以編程方式卸載舊程序並開始安裝 新軟件包。

我需要建議的部分是上面的第4部分。在運行原始程序的同時以編程方式卸載舊程序並開始安裝新程序的最佳方式是什麼?我假設必須有一些中介程序完成所有工作(關閉當前程序,運行卸載程序,然後啓動新的安裝程序)是否有更好的方法?我只是想轉移到一個模型中,我們更新了完整安裝而不僅僅是文件 - 這將使我們能夠更輕鬆地對我們的軟件進行版本升級,並保持自包含的安裝在任何時候都可以恢復。

感謝您的諮詢!

編輯:相關問題 - 什麼是最簡單的方法來找到特定安裝的安裝UUID?

+0

聽起來像你理解情況相當好。 有些人將更新程序存根(稱爲中介)放在一起,他們從即將更新的應用程序啓動。它運行msiexec/u ,卸載舊的東西,然後它可以運行新下載的設置。但在某些時候,它會退出,某個地方需要刪除該更新程序存根exe文件。 – Cheeso 2009-11-05 11:55:14

回答

1

我這樣做的方式是有一個單獨的程序(讓我們稱之爲StartUp.exe)檢查更新,然後加載真正的軟件(我們稱之爲Program.exe)。 StartUp.exe與Program.exe具有相同的圖標,並且是桌面快捷方式和菜單項所指向的可執行文件,使用與Program.exe相同的名稱。

所以序列去這樣的事情:

  1. 用戶雙擊桌面快捷方式或菜單項,看起來像的Program.exe,被稱爲相同的名稱,但實際上是STARTUP.EXE
  2. 啓動。 exe文件運行,並檢查是否有
  3. 如果有更新,它只是拷貝然後在任何更新(我們建立了一個很好的系統,進度條,但你可以簡單地將新文件拷貝過來的舊文件)
  4. STARTUP.EXE然後運行Program.exe
  5. STARTUP.EXE然後退出

這有沒有你的程序文件被鎖定,因爲裝載程序實際上是不同的程序的優點。用戶並不聰明,因爲他們運行的程序看起來像是和他們想要運行的程序一樣,最終的結果是他們想運行的程序運行並保證是最新的版本。

使用更新按鈕做它會更加複雜,但我們需要強制最新版本的程序運行(由於版本之間的數據庫差異),所以強制更新啓動爲我們工作。

我相信現在這樣做的方式是使用ClickOnce部署,但我從來沒有嘗試過 - 當我編寫我的系統時這個方法不可用,而且這種方法很簡單並且運行良好。