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

【C#】線上更新--解壓

上一篇部落格,分享瞭如何通過程式下載伺服器中的更新檔案,這次我為大家分享一下,如何將下載好的更新檔案的壓縮包解壓並替換掉之前的檔案。

 

1.由於我們設定的是程式關閉之後提醒使用者,是否更新軟體,所以我們需要將解壓的程式獨立出來,否則,更新程式和執行的程式同時執行會導致,無法替換舊版本的系統。

2.由於解壓程式和系統程式分離,所以我們解壓之前,需要判斷(與伺服器的版本號進行對比),是否觸發解壓程式。

 

解壓程式碼(解壓程式中):

        /// <summary>
        /// 更新檔案成功方法(返回true/false)
        /// </summary>
        /// <param name="dir">本地程式執行路徑</param>
        /// <param name="zipfile">本地壓縮檔案路徑</param>
        /// <returns></returns>
        public bool Replace()
        {
            //建立服務客戶端
            UpdateServiceClient client = new UpdateServiceClient();
            //接受伺服器的版本等資訊
            List<string> stringList = client.SelectVersion();
            //檔名
            string fileName = stringList[1].ToString();

            // GetCurrentDirectory
            // 摘要:獲取應用程式的當前工作目錄
            // 返回結果:包含當前工作目錄的路徑且不以反斜槓 (\) 結尾的字串。
            string dir = Directory.GetCurrentDirectory();
            //壓縮包的路徑
            string zipfile = Path.Combine(dir, fileName + ".zip");
            //當前工作目錄中新建臨時檔案NewVersion存放新版本檔案
            string extractPath = Path.Combine(dir,"version");
            //解壓縮檔案到NewVersion中
            ZipFile.ExtractToDirectory(zipfile, extractPath);

            //遍歷所有解壓出來的檔案
            foreach (string item in Directory.GetFiles(extractPath))
            {
                //把檔案更新到程式執行路徑
                File.Copy(item, System.IO.Path.Combine(dir, System.IO.Path.GetFileName(item)), true);
            }
            //刪除壓縮包
            File.Delete(zipfile);
            DirectoryInfo di = new DirectoryInfo((extractPath));
            //刪除臨時資料夾
            di.Delete(true);
            return true;

        }

系統退出的方法中新增啟動解壓程式(執行程式中):

        // 獲取當前執行程式的路徑
        string dir = Directory.GetCurrentDirectory();
        // 例項化下載類
        DownLoad dl = new DownLoad();
        // 判斷是否有版本
        // isUpdate方法去判斷是否需要更新
        // 此方法上片部落格裡有方法體
        if (dl.IsUpdate())
        {
            // 啟動一個新的程式
            Process unZip;
            // 程式的路徑和名字
            unZip= Process.Start(dir + "\\update" + ".exe");
        }

 

大家需要注意的就是:我們需要把解壓程式中生成的exe以及所需的dll拷貝到執行程式bin中的debug檔案中(與Process.Start()中的路徑相同就可以)。

 

核心程式碼的話就這些了,關於伺服器的設定,可以將更新的檔案打成壓縮包,然後釋出到IIS服務上,然後使用ftp協議進行傳輸,這樣可能不太安全,所以也可以同nigx反向代理,將壓縮包方法網站上,通過http協議進行傳輸。

 

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