首頁 後端開發 C#.Net教程 C#如何實作自動更新本機程式的實例分析

C#如何實作自動更新本機程式的實例分析

Aug 08, 2017 pm 02:13 PM
.net 本地

關於系統的自動更新。近日有一情況是需要將java端後台最新版本的系統檔案覆蓋本機用戶端,簡稱自動更新了。

本機會取得目前系統的版本號碼去請求後台java的介面資料。回給我的是後台壓縮包轉的base64位元組流。

客戶端拿到新版本需要更新本機程式。


    if (UpdateSystem(Path.Combine(Application.StartupPath, "Version.txt"), Path.Combine(Application.StartupPath, "u.zip")))
            {
                Application.Exit();
            }
登入後複製


/// <summary>
        /// 读取本地版本请求更新
        /// </summary>
        /// <param name="document">读取的文件信息</param>
        /// <param name="zipPath">返回zip包本地路径</param>
        /// <returns></returns>
        private bool UpdateSystem(string document, string zipPath)
        {
            try
            {
                Dictionary<string, string> postDic = new Dictionary<string, string>();
                //获取文件内的版本号
                if(File.Exists(document))
                {
                    postDic.Add("version", File.ReadAllText(document).Trim());
                }
                else
                {
                    postDic.Add("version", "0");
                }

                string postJson = JsonConvert.SerializeObject(postDic);
                string url = GetAppSettingValue("serverUrl") + "parkClient/parkClientUpdate";
                //返回的json数据
                JObject obj = (JObject)JsonConvert.DeserializeObject(PostData(postJson, url));
                string newVersion = obj["version"].ToString();
                if (!String.IsNullOrWhiteSpace(newVersion))
                {
                    byte[] bytesFile = Convert.FromBase64String(obj["byteArray"].ToString());
                    if (obj["clientMD5"].ToString() == BitConverter.ToString(
                        new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(bytesFile)).Replace("-", ""))
                    {
                        ZipCoverage(bytesFile, zipPath);

                        File.WriteAllText(document, newVersion);
                       
                    }
                }

                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
        }

        /// <summary>
        /// 解压zip包覆盖更新
        /// </summary>
        /// <param name="bytes">接受更新包的字节信息</param>
        /// <param name="zpath">覆盖的路径</param>
        private void ZipCoverage(byte[] bytes, string zpath)
        {
            File.WriteAllBytes(zpath, bytes);
            using (ZipArchive archive = ZipFile.OpenRead(zpath))
            {
                string file = null;
                foreach (ZipArchiveEntry entry in archive.Entries)
                {
                    if (!entry.FullName.EndsWith("/"))
                    {
                        file = Path.Combine(Application.StartupPath, entry.FullName);
                        if (File.Exists(file))
                        {
                            File.Delete(file);
                        }
                    }
                }
            }
            ZipFile.ExtractToDirectory(zpath, Application.StartupPath);
           
        }

        /// <summary>
        /// 获取配置文件中的appSettings节中的配置内容
        /// </summary>
        /// <param name="appSettingKey"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        private string GetAppSettingValue(string appSettingKey)
        {
            ExeConfigurationFileMap map = new ExeConfigurationFileMap { ExeConfigFilename = @"TDH.Parking.Client.exe.config" };
            return ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None).AppSettings.Settings[appSettingKey].Value;
        }
登入後複製

 


byte[] bytesFile = Convert.FromBase64String(obj["byteArray"].ToString());
登入後複製

這裡是拿到的位元組流了。

這個方法可以解決在同一個解決方案中有多個專案可以讀取到同一個專案下的App.config文件。

注意:其中有引用到的類別庫, 這是用來操作壓縮套件的。

說下想法:第一步其實就是拿到壓縮包的位元組流再保存到本地,第二步就是循環讀取壓縮包的文件替換本地的文件,完成本地系統的版本更新。

無論簡單與複雜,都需一步步向前方邁進。

 

以上是C#如何實作自動更新本機程式的實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

汽水音樂本地音樂怎麼添加 汽水音樂本地音樂怎麼添加 Feb 23, 2024 pm 07:13 PM

汽水音樂本地音樂怎麼添加?汽水音樂APP中可以添加自己喜愛的本地音樂,但是多數的小伙伴不知道如何添加本地音樂,接下來就是小編為用戶帶來的汽水音樂本地音樂添加方法圖文教程,有興趣的用戶快來一起看看吧!汽水音樂使用教學汽水音樂本地音樂怎麼添加1、先打開汽水音樂APP,主頁最下方【音樂】功能專區點擊;2、之後進入到播放頁面,點擊右下角【三個點】圖標;3、最後下方展開功能欄,選擇其中【下載】按鈕即可新增至本機音樂。

C#的就業前景如何 C#的就業前景如何 Oct 19, 2023 am 11:02 AM

無論您是初學者還是有經驗的專業人士,掌握C#將為您的職業發展鋪平道路。

分享幾個.NET開源的AI和LLM相關專案框架 分享幾個.NET開源的AI和LLM相關專案框架 May 06, 2024 pm 04:43 PM

當今人工智慧(AI)技術的發展如火如荼,它們在各個領域都展現了巨大的潛力和影響力。今天大姚給大家分享4個.NET開源的AI模型LLM相關的專案框架,希望能為大家提供一些參考。 https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel是一種開源的軟體開發工具包(SDK),旨在將大型語言模型(LLM)如OpenAI、Azure

PHP保存遠端圖片到本地後如何添加浮水印並保存? PHP保存遠端圖片到本地後如何添加浮水印並保存? Jul 11, 2023 pm 11:48 PM

PHP保存遠端圖片到本地後如何添加浮水印並保存?在PHP開發中,經常會遇到需要將遠端圖片儲存到本地的需求。而有時候,我們可能還需要在保存後的圖片上添加浮水印以保護版權或增加額外資訊。本文將介紹如何使用PHP保存遠端圖片到本地,並在儲存後的圖片上添加浮水印。一、儲存遠端圖片到本地首先,我們需要使用PHP的檔案操作函數將遠端圖片儲存到本地。下面是一個簡單的範例程式碼:&

Win11 apk安裝指南 Win11 apk安裝指南 Jan 03, 2024 pm 10:24 PM

眾所周知,微軟宣布了win11將能夠運行安卓應用程序,並且可以安裝本地apk,但是在更新win11之後用戶發現自己不知道怎麼安裝本地apk,其實是因為目前微軟還沒有為win11實裝這款功能,需要等待功能實裝才能使用。 win11怎麼安裝本地apk:1.根據微軟的說法,win11在實裝了這個功能之後,直接雙擊下載好的apk檔案就可以直接安裝了。 2.安裝完成後使用者也可以直接在系統中運作了。 3.雖然現在已經是正式版win11了,但微軟目前還沒有為win11實裝這個功能。 4.所以如果使用者想要在win11

面向開發人員的.NET效能最佳化技術 面向開發人員的.NET效能最佳化技術 Sep 12, 2023 am 10:43 AM

如果你是.NET開發者,你必須意識到在交付高品質軟體方面,優化功能和效能的重要性。透過熟練使用提供的資源並減少網站載入時間,你不僅為使用者創造了愉快的體驗,還能減少基礎設施成本。

Java框架與.NET框架的效能差異 Java框架與.NET框架的效能差異 Jun 03, 2024 am 09:19 AM

在高並發請求處理方面,.NETASP.NETCoreWebAPI效能優於JavaSpringMVC,原因包括:AOT提前編譯,減少啟動時間;更精細的記憶體管理,由開發人員負責分配和釋放物件記憶體。

如何在CentOS7上新增本地回環位址? 如何在CentOS7上新增本地回環位址? Jan 13, 2024 pm 08:00 PM

1.暫時加入ipaddradd10.10.1.1/32devlo:1重啟失效2、永久加入cd/etc/sysconfig/network-scriptscpifcfg-loifcfg-lo:1[root@localhostnetwork-scripts]#catifcfg-lo:1DEVICE=lo: 1IPADDR=10.10.1.1NETMASK=255.255.255.255ONBOOT=yesNAME=loopback1[root@localhostnetwork-scripts]#ipa

See all articles