棒!有了它,我不再為升級部署發(fā)愁了!

哈嘍,大家好!我是指北君。

指北君在一些小型項目實施過程中,常采用快速迭代開發(fā)流程,即收集需求->敏捷開發(fā)->極速測試->快速部署->收集反饋,這樣的過程循環(huán)往復,直到該軟件項目的使用生命周期結(jié)束為止。

這時候,一個良好的升級部署組件包顯得很重要,它讓你的項目很方便地集成如下功能:組件自更新檢查、從服務器取得準確版本組件壓縮包、支持斷點傳續(xù)、解壓更新包等等。

如果靠自己開發(fā),那就費老牛鼻子勁了,占用項目資源不說,還很有可能拖延項目交付時間!所以,還是要依靠開源!

指北君用過一個開源的升級部署組件包,非常好用!有了它,不用大費心力去自己開發(fā),重復別人走過的坑;有了它,你就可以很輕松的完成迭代快速升級,只管把更新包上傳到服務器就行,用戶只要啟動軟件,就會自動發(fā)現(xiàn)新版更新包并自動下載、更新(當然,也可以設置允許用戶拒絕更新,哈哈)。你現(xiàn)在很好奇這是什么了吧?當當,指北君來告訴你,可愛的GeneralUpdate組件閃亮登場啦!

一、組件介紹

GeneralUpdate是立志于成為全平臺更新客戶端的框架,提供高性能低損耗,斷點續(xù)傳、逐版本更新、二進制差分更新、增量更新功能、配置文件保留更新等特性。

二、功能介紹

組件包由以下幾大模塊組成,每個模塊的主要功能和適用范圍從名字上就能看出來:

  • GeneralUpdate.Core:斷點續(xù)傳、逐版本更新。
  • GeneralUpdate.ClientCore:斷點續(xù)傳、逐版本更新、更新組件自更新、便捷啟動更新組件
  • GeneralUpdate.AspNetCore:服務端支持更新包下載地址、版本信息等內(nèi)容。
  • GeneralUpdate.Zip:解壓更新包、解壓進度通知。
  • GeneralUpdate.Single:應用程序單例運行。
  • GeneralUpdate.Common:組件公共類、方法。
  • 源碼"sql"目錄下包含mysql數(shù)據(jù)庫表內(nèi)容的生成腳本。

三、支持框架

四、運行邏輯

GeneralUpdate是基于.net standard開發(fā)的一款(c/s應用)自動升級程序。該組件將更新的核心部分抽離出來方便應用于多種項目當中。目前適用于WPF、控制臺應用、WinForm。其核心運行邏輯可以參見下圖。

五、運行效果

六、使用示例

  1. GeneralUpdate.ClientCore使用示例
    private ClientParameter clientParameter;
    private GeneralClientBootstrap generalClientBootstrap;
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Task.Run(async()=>
        {
            //主程序信息
            var mainVersion = "1.1.1";
            var mianType = 1;
            //該對象用于主程序客戶端與更新組件進程之間交互用的對象
            clientParameter = new ClientParameter();
            //更新組件的版本號
            clientParameter.ClientVersion = "1.1.1";
            //客戶端類型:1.主程序客戶端 2.更新組件
            clientParameter.ClientType = 2;
            //更新程序exe名稱
            clientParameter.AppName = "AutoUpdate.ConsoleApp";
            //主程序客戶端exe名稱clientParameter.MainAppName = "AutoUpdate.Test";
            //本機的客戶端程序應用地址
            clientParameter.InstallPath = @"D:\update_test";
            //更新公告網(wǎng)頁
            clientParameter.UpdateLogUrl = "https://www.baidu.com/";
            //更新組件請求驗證更新的服務端地址
            clientParameter.ValidateUrl = $"https://127.0.0.1:5001/api/update/getUpdateValidate/{clientParameter.ClientType }/{clientParameter.ClientVersion }";
            //更新組件更新包下載地址
            clientParameter.UpdateUrl = $"https://127.0.0.1:5001/api/update/getUpdateVersions/{clientParameter.ClientType }/{ clientParameter.ClientVersion }";
            //主程序客戶端請求驗證更新的服務端地址
            clientParameter.MainValidateUrl = $"https://127.0.0.1:5001/api/update/getUpdateValidate/{ mianType }/{ mainVersion }";
            //主程序客戶端更新包下載地址
            clientParameter.MainUpdateUrl =
            $"https://127.0.0.1:5001/api/update/getUpdateVersions/{ mianType }/{ mainVersion }";
            generalClientBootstrap = new GeneralClientBootstrap();
            //單個或多個更新包下載通知事件
            generalClientBootstrap.MutiDownloadProgressChanged +=
            OnMutiDownloadProgressChanged;
            //單個或多個更新包下載速度、剩余下載事件、當前下載版本信息通知事件
            generalClientBootstrap.MutiDownloadStatistics +=
            OnMutiDownloadStatistics;
            //單個或多個更新包下載完成
            generalClientBootstrap.MutiDownloadCompleted +=
            OnMutiDownloadCompleted;
            //完成所有的下載任務通知
            generalClientBootstrap.MutiAllDownloadCompleted +=
            OnMutiAllDownloadCompleted;
            //下載過程出現(xiàn)的異常通知
            generalClientBootstrap.MutiDownloadError += OnMutiDownloadError;
            //整個更新過程出現(xiàn)的任何問題都會通過這個事件通知
            generalClientBootstrap.Exception += OnException;
            //ClientStrategy該更新策略將完成1.自動升級組件自更新 2.啟動更新組件 3.配置好
            ClientParameter無需再像之前的版本寫args數(shù)組進程通訊了。
            generalClientBootstrap.Config(clientParameter).
            Strategy<ClientStrategy>();
            await generalClientBootstrap.LaunchTaskAsync();
        });
    }
    private void OnMutiDownloadStatistics(object sender,
    MutiDownloadStatisticsEventArgs e)
    {
        //e.Remaining 剩余下載時間
        //e.Speed 下載速度
        //e.Version 當前下載的版本信息
    }
    private void OnMutiDownloadProgressChanged(object sender,
    MutiDownloadProgressChangedEventArgs e)
    {
        //e.TotalBytesToReceive 當前更新包需要下載的總大小
        //e.ProgressValue 當前進度值
        //e.ProgressPercentage 當前進度的百分比
        //e.Version 當前下載的版本信息
        //e.Type 當前正在執(zhí)行的操作 1.ProgressType.Check 檢查版本信息中
        2.ProgressType.Donwload 正在下載當前版本 3. ProgressType.Updatefile 更新當前版本 4.
        ProgressType.Done更新完成 5.ProgressType.Fail 更新失敗
        //e.BytesReceived 已下載大小
    }
  1. GeneralUpdate.Core使用示例
    static void Main(string[] args)
    {
        var resultBase64 = args[0];
        var bootstrap = new GeneralUpdateBootstrap();
        bootstrap.Exception += OnException;
        bootstrap.MutiDownloadError += OnMutiDownloadError;
        bootstrap.MutiDownloadCompleted += OnMutiDownloadCompleted;
        bootstrap.MutiDownloadStatistics += OnMutiDownloadStatistics;
        bootstrap.MutiDownloadProgressChanged += OnMutiDownloadProgressChanged;
        bootstrap.MutiAllDownloadCompleted += OnMutiAllDownloadCompleted;
        bootstrap.Strategy<DefaultStrategy>().
        Option(UpdateOption.DownloadTimeOut, 60).
        RemoteAddressBase64(resultBase64).
        LaunchAsync();
    }

以上示例就介紹到這里啦,有需求的伙伴可以通過后臺自行獲取項目地址繼續(xù)深入。

七、指北君有話說

這個開源項目提供全部源代碼,方便大家下載,還提供了很詳細的文檔說明。
以指北君使用經(jīng)驗來看,這個組件包已經(jīng)基本滿足了在迭代小型項目中實現(xiàn)自動升級組件功能。大家可以多多嘗試。該項目的團隊依然在繼續(xù)維護,反饋很熱烈,前途遠大啊。

這么好的開發(fā)工具包,在項目開發(fā)過程中會讓你省心很多。所以指北君很有誠意的推薦這款GeneralUpdate組件包啦。還有,通過對源代碼的學習,可以提高自己的水平。

開源指北,立志做最好的開源分享平臺,分享有趣實用的開源項目。
歡迎加入交流群,你可以摸魚、劃水、吐槽、咨詢。
還有簡歷模板、各種技術面試資料等100G的資源等著你領取哦。
公眾號回復888馬上加入,快來一起來聊一聊吧!

開源指北公眾號回復 GeneralUpdate 獲取資源。

以上就是本次推薦的全部內(nèi)容,我是指北君,感謝各位的觀看。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容