【C#】線上更新--下載
阿新 • • 發佈:2019-01-06
線上更新的方法多種多樣,在這裡我們分享一下我的思路!
本地系統的版本號存在系統額配置檔案中,新系統的版本號存在服務的資料庫中,通過查詢資料庫的版本號和本地的版本號進行對比,判斷是否更新。
與此同時,在資料庫中同時記錄下,伺服器中檔案路徑和檔名字(如果有需要,資料庫中也可以記錄版本更新內容),這樣通過一次查詢,就得到了你需要的所有資訊。
下載更新的程式碼:
using System.Net; //呼叫的WCF服務 using DAL.UpdateServiceTest; public List<string> SelectUpdatNews() { List<string> stringList=null; //判斷使用者是否聯網 if (NetWorkState.IsNetWorking()) { //正常聯網 //建立WCF服務客戶端 UpdateServiceClient client = new UpdateServiceClient(); //接受伺服器的版本等資訊 stringList = client.SelectVersion(); //返回伺服器的版本等資訊 } return stringList; } //從伺服器中下載新系統安裝包 public void DownLoadFile() { //資料庫返回的更新檔案的資訊 //SelectUpdateNews是呼叫的WCF查詢伺服器新版本檔案的資訊 //它可以直接通過遠端查詢實現 List<string> stringList = SelectUpdatNews(); //更新檔案的路徑 string url = stringList[0].ToString(); //建立連線伺服器的客戶端 WebClient wc = new WebClient(); // GetCurrentDirectory // 摘要:獲取應用程式的當前工作目錄。 // 返回結果:包含當前工作目錄的路徑且不以反斜槓 (\) 結尾的字串。 string dir = System.IO.Directory.GetCurrentDirectory(); // Combine // 將字串陣列組合成一個路徑 string fileName = System.IO.Path.Combine(dir, fileName + ".zip"); //連線伺服器的使用者名稱和密碼 wc.Credentials = new System.Net.NetworkCredential("admin", "Radmin"); //下載檔案(路徑,檔名) //路徑形式: ftp://192.168.**.***/ftp/最新系統.zip //檔名形式: 最新系統.zip(可以通過字串擷取獲得) wc.DownloadFile(url, fileName); // 釋放由 System.ComponentModel.Component 使用的所有資源 wc.Dispose(); }
首先解釋一下:執行緒。一大家都知道一個程序包括多個執行緒(就像一個包裡邊有多個類一樣),一個程式進行時,為了能讓程式能進行多個操作,我們就需要在開始一個進行。
為什麼要啟用多執行緒,為了給使用者更好的使用者體驗,在程式執行的時候,我們後臺自動將需要更新的檔案下載到本地,這樣的話,使用者只需要等待你安裝的時間。
public bool IsUpdate() { bool flag=false; string newVersion; //配置檔案中獲取系統的版本號 string oldVersion = ConfigurationManager.AppSettings.Get("version"); //獲取伺服器的版本號 List<string> stringList = SelectUpdatNews(); newVersion = stringList[2].ToString(); //在這裡需要判斷一下,使用者電腦是否聯網,沒有聯網是復發下載的 if(NetWorkState.IsNetWorking()) { //判斷本地系統的版本號和伺服器中的版本號是否一致 if (oldVersion == newVersion) { flag = false; } else { flag = true; } } } //在程式啟動的後端程式碼中 //判斷是否新版本更新 if(IsUpdate()) { //建立一個執行緒,上邊的DownLoadFile方法 Thread thread = new Thread(DownLoadFile()); //開始執行緒 thread .Start(); }
通過這種方法,就能實現:版本對比,遠端下載。(後續還會更新如何解壓和替換舊的系統,實現更新)。
小編只是簡單總結實現,如有不足,歡迎大神指點!