2010-09-20 168 views
5

我有一個系統,在觸摸屏上每天24小時運行兩個Web應用程序,一個Web服務,一個Windows服務和一個WPF應用程序。所有這些都連接到數據庫。自動更新

我希望能夠升級所有這些應用程序,方法是將升級文件上載到數據庫並設置升級發生的日期和時間。

我對如何做到這一點有一個想法。

  1. 應用程序有一個線程正在運行以查找可用的升級。
  2. 當找到升級時,文件被下載到應用程序的計算機。
  3. 下載完成後,應用程序會觸發重新啓動。
  4. 當應用程序啓動時,它會在本地計算機上查找升級文件。
  5. 如果升級可用,應用程序將自行升級。

我不太確定所有這些步驟應該如何完成,尤其是最後一步。但我想對此有一些評論。這完全錯了嗎?我在正確的軌道上嗎?任何提示如何做到這一點或以其他方式?

+1

是的,你的方法是可行的。根據升級文件的大小,我可能不會將它存儲在數據庫中,但這只是一個挑剔。 – Piskvor 2010-09-20 07:07:20

+0

Piskvor是對的,你不想把它存儲在數據庫中。我在下面發佈了一個答案,告訴您關於ClickOnce的信息。 – Bronumski 2010-09-21 12:33:31

+0

我也會考慮一種回滾的方式,以防更新失敗!特別是如果你沒有物理訪問設備。 – chriszero 2010-09-21 12:42:49

回答

1

我想你會在這裏走對了。輪詢應用程序檢查數據庫是否存在新的更新,然後是xcopy部署腳本。

這也可以通過PowerShell腳本實現,該腳本按計劃運行,例如每10分鐘運行一次。它可以檢查數據庫,關閉進程和服務,xcopy應用程序(從共享源)並重新啓動所述服務和應用程序。

這一切都假定您最初並未使用Windows Installer打包和部署應用程序。雖然直接替換二進制文件的xcopy不會傷害MSI軟件包,但不推薦使用。我們在工作中使用AD MSI部署,在最好的時候這是一種痛苦!

MSDN包含用於WPF應用程序的MSI和XCopy部署的引用(以及安全要求)。

這是第一個鏈接,我發現從PowerShell的SQL查詢:http://elegantcode.com/2008/03/27/discovering-windows-powershell/

祝你好運!

0

你真的想從數據庫運行更新還是隻是一個可能的解決方案?你正在重新發明輪子。

看看ClickOnce部署,您需要的一切已經完成並集成到VisualStudio中。如果你使用已經存在的東西,你可以從現有的文檔中獲益,也可以獲得已經經歷過痛點,更新和修復的人的博客。

ClickOnce Deployment

ClickOnce Deployment in .NET Framework 2.0

你想怎麼使用的ClickOnce取決於你想擺脫它是什麼。開箱即用,您可以非常輕鬆地創建一個部署,每次運行應用程序時都會檢查升級,但您也可以使用一小段代碼讓應用程序在運行時檢查更新。

Dominic Zukiewicz提到的Updater Application BlockVersion是前綴ClickOnce。

編輯

的ClickOnce提供了服務器和客戶端上都回滾方案。客戶端可以使用普通的添加刪除程序對話框回滾到以前的版本,您可以輕鬆地重新發布以前的版本。

+0

聽起來不錯。但我認爲有些事情在我的情況下不起作用。對於我們所有的應用程序類型(Web,WPF,服務)來說,它是否有用?需要互聯網訪問所有應用程序?無法選擇要升級的系統安裝?我在這裏可能是錯的。 – 2010-09-22 08:12:07

+0

抱歉,我錯過了「我希望能夠升級所有這些應用程序」。簡短的答案是否定的,您可以使用ClickOnce作爲客戶端應用程序。如果您希望以與重新考慮部署策略相同的方式升級所有應用程序,那麼很少有適合所有解決方案的解決方案。我可以說的是,從部署到最終用戶的體驗出發,ClickOnce是一個非常好的部署工具,所有工作都已經完成並提供了非常好的用戶體驗。 – Bronumski 2010-09-22 08:54:51

+0

我會再看看它。任何事情都比我們今天所做的更好 - 爲我們所需的所有服務器提供VPN和遠程桌面,並向我們沒有VPN訪問權限的客戶提供服務。 – 2010-09-22 08:58:20

1

您在使用ClickOnce時會遇到麻煩。 ClickOnce只能用於您的WPF應用程序,它無法對服務或Web應用程序執行任何操作。您可以編寫一個單獨的ClickOnce部署的「更新程序」應用程序,其工作是更新其他應用程序,但這似乎還有點兒不足。

這聽起來很愚蠢,但我會從我能想到的最簡單的事情開始。如何使用Dropbox來推送更新文件;那麼在啓動時運行一個AutoHotKey腳本,觀察Dropbox文件夾中的新更新並運行它們?

聽起來很有趣,但它可以在一兩個小時內證明出來。

0

您可以創建另一個Windows服務,每天進行更新。如果有任何更新需要處理,該服務將查找特定的文件夾。例如,它可以尋找一個xml文件,告訴它該應用程序的新版本以及要更新的文件是什麼。它會關閉應用程序/服務,備份它需要更新的文件,啓動應用程序/服務,並清理保存至少三個備份文件的備份文件。該服務應跟蹤最新版本和當前版本的安裝情況,以便在讀取xml文件時檢查它是否爲新更新,或者可以在完成時簡單地刪除xml文件。

0

Google Omaha怎麼樣?它是一款開源工具,目前用於推送Google Chrome和Google地球的更新。奧馬哈也可以處理應用程序安裝。高層次的設計概述可以在here找到。