1. 程式人生 > >【C#】線上更新--下載

【C#】線上更新--下載

線上更新的方法多種多樣,在這裡我們分享一下我的思路!

 

本地系統的版本號存在系統額配置檔案中,新系統的版本號存在服務的資料庫中,通過查詢資料庫的版本號和本地的版本號進行對比,判斷是否更新。

與此同時,在資料庫中同時記錄下,伺服器中檔案路徑和檔名字(如果有需要,資料庫中也可以記錄版本更新內容),這樣通過一次查詢,就得到了你需要的所有資訊。

 

下載更新的程式碼:

      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();   
          }
               

 

通過這種方法,就能實現:版本對比,遠端下載。(後續還會更新如何解壓和替換舊的系統,實現更新)。

 

小編只是簡單總結實現,如有不足,歡迎大神指點!