Appupdater.dll 實做心得

書于2005/11/25
——————————————————–

以下是我今天寫給同事的信 想想也許板上會有人有興趣 就順便轉過來了

不過裡頭附件我已改放到 http://140.116.250.5/~morgan/SimpleSample.zip

至於測試的Web Server由於那台機器是不對外開放的

所以想要玩看看的人 可能自己要找一台Web Server來放置更新檔案

有問題的話 可以一起討論囉 😛

————————————————————————
Dear all:

經過了一天多來的不斷 try error 總算暫時將這個元件給實做出來

根據我在網路上Search跟動手的結果 將一些心得寫下來 希望給有需要的人做個參考

現今Microsoft架構 要做到"自動更新" 主要有兩種選擇:

一個是採用Microsoft Practice & Patterns 中提供的Updater Application Block

另一個選擇是用 windowsforms.net 上一個微軟員工所寫的AppUpdater元件

前者根據前人的說法 是比較龐大 而後者比較巧小 而我則是先試做後者看看而已

它主要原理很簡單 就是在Web Server端 放上要更新的新版本程式及一個資訊檔

然後當Client程式開啟時 透過Appupdater元件 會連結到事先設定好的Server端位址

然後去比較資訊檔 如果有較新版本 就會詢問使用者 是否要更新程式

而要實做出這種功能 它提供了三種方式:1.單純比較程式修改時間新舊

2.透過UpdateVersion.xml去比較版本 3.使用Web Service方式

不管是哪種方式 在實做上 只要你不是英語系的開發環境 將會遇到一個問題

那就是在程式啟動 去連結Server端時 它會跟你說 miss了兩個dll檔無法下載

一個是System.Resources.dll 另一個是mscorlib.Resource.dll

因為這兩個檔案已經被包含在英語系用戶的系統dll中

但其他語言的用戶 並沒有這兩個檔案 所以需要額外下載

而我也找過了自己跟其他有灌.net framework的主機 卻看不到這兩個檔案的蹤影

本來也是卡住這邊無法繼續

不過窮則變 變則通 有google在 就有希望在 怪不得google股價現在遠遠超過Microsoft

我已經下載回來這兩個檔案 並將它放到Server端

經過一些測試及失敗與再研究之後 目前應該算是測試成功了

附件夾檔裡頭有兩個資料夾 1.SimpleSample 2.SimpleSample_ClientSetup

1.SimpleSample

要拿來測試更新的程式 方案裡頭有個要注意的地方就是AppUpdate.dll元件
它有兩個屬性要注意
(1)ChangeDetectionMode
(設定ServerManifestCheck則為我剛剛提的更新三種方式之第二種)
(2)UpdateUrl
(設定Server主機位址 目前我暫時以http://server3/temp/ 作為測試)
另外一個要注意的地方就是在Compile時會紀錄程式相關資訊的AssemblyInfo.cs
裡頭可以設定目前程式版本為何[assembly: AssemblyVersion("1.0.0.0")]
到時候要比較的地方就是這裡

2.SimpleSample_ClientSetup

第一層目錄有一個AppStart.exe 及AppStart.config 可直接執行
它會去執行AppStart.config下紀錄的哪個目錄的哪個執行檔
例如1.0.0.0下的SimpleSample.exe
而執行完 透過AppUpdate.dll 它便會連結到Server端
去比較Server端下面的UpdateVersion.xml
(因為是第二種方式 裡頭就會記錄現在最新的版本放在Server的哪個資料夾中)
所以如果比較結果2.0.0.0 >原本程式的1.0.0.0 它便會詢問使用者是否要更新檔案
如果更新了 它便會在Client端自動建立一個2.0.0.0的資料夾
同時更改AppStart.config裡頭的位址
讓下次AppStart.exe在執行時 便會去跑新版的程式了

因此透過此元件 便可以讓Client的軟體 進行自動的線上更新

只要將新版程式放上預先設定好的Server端 然後更改UpdateVersion.xml裡頭的資訊

便可以對軟體版本做管理 不僅是對使用者還是對管理者

此為昨天到今天所實做之過程 大致上不會很難 只是會遇到一些問題

例如像第一種單純比較檔案修改時間方式 我就實做不出來

不知是還有什麼地方設定不對 還是程式放置地點不對 @@

Anyway 至少比較實用的第二種方式 目前證明是可用的 也已經完成Sample的測試了

而第三種Web Service我沒時間就沒試了

在這邊提供給大家參考研究囉 🙂

Morgan

Please follow and like us:
Spread the love

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注