zoukankan      html  css  js  c++  java
  • 搭建Wpf框架(2) —— Wpf客户端生成安装包与自动升级包

    首先,vs自带一键发布功能,但是一个文件夹打包交付给客户,还需要解压,总显得不够高级,优点是足够绿色。

    本文介绍两种常用的打包方式Setup Project和Wix ToolSet。

    Setup Project教程非常多,不提供链接了,但是那么多教程,一个关键点没有说,那就是添加程序主输出,那引用的dll怎么办?总不能每增加一批dll,就改一次打包工程。

    除了主输出以外,还要添加PublishItemsOutputGroup。这样就能把目标目录下的文件都添加过来。

    接下来再说说Wix打包

    推荐

    Wix链接 安装部署教程(十) --来,用WPF做个漂亮的安装界面 https://www.cnblogs.com/stoneniqiu/p/4525032.html

    详情去链接查看,当然我这里也有改进的地方,那就是目标文件夹下的文件也不能自动添加,但是他是xml编辑项目,那么对一个程序员来说,那么就可以写个小程序,自动生成了。

    先写个模板文件,需要替换的地方占个位,和代码生成工具一个套路。

     上面那个红框位置,就可以遍历文件夹自动添加了,然后替换占位符。源码在AIStudio.Wpf.AClient下的AIStudio.Wpf.WixXmlGenerate工程中。

    这个时候安装包就能很轻松的生成了,但是安装界面依旧没什么特色。

    大家可以按照用WPF做个漂亮的安装界面 来做一个,原作者搞的非常棒,可以拿来直接用。wpf界面,大家也可以按照自己的想法改。

     

     (尊重一下原作者,上的他的图,本框架改成了自己的log)


    最后,再介绍一种

    wpf入门第七篇 使用Squirrel自动更新应用
    https://blog.csdn.net/wf824284257/article/details/89164525

    这个除了不能定制安装位置和安装提示语句,但是生成方式非常简单,一个命令就生成,还能自动生成升级包,升级起来简直简单的不要不要。还是增量升级。缺点是,不能定制化。

    另外一种自动升级方法是AutoUpdater.NET,缺点是全量升级,怎么增量升级了?各位朋友有好办法吗?

    本框架分别集成了这两种升级方法的启动项目,分别是AIStudio.Wpf.Client和AIStudio.Wpf.Client472。

    自动升级部分代码如下:

    示例1配置文件为(AutoUpdater.NET)

    <add key="ServerIP" value="http://121.36.12.76:5000"/>
    <add key="UpdateAddress" value="http://121.36.12.76:5000/Update/AutoUpdater.xml"/>

    代码为:


    try { Assembly assembly = Assembly.GetEntryAssembly(); CurrentVersion.Text = $"Current Version: {assembly.GetName().Version}"; LocalSetting.SetAppSetting("Version", CurrentVersion.Text); Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("zh"); AutoUpdater.LetUserSelectRemindLater = true; AutoUpdater.RemindLaterTimeSpan = RemindLaterFormat.Minutes; AutoUpdater.RemindLaterAt = 1; AutoUpdater.ReportErrors = true; AutoUpdater.Synchronous = true; AutoUpdater.Start(LocalSetting.UpdateAddress); } catch (Exception ex) { _logger.Log(LogLevel.Error, LogType.系统异常, ex.ToString()); }

     对比

    示例2配置文件为:(Squirrel)

    <add key="ServerIP" value="http://121.36.12.76:5000"/>
    <add key="UpdateAddress" value="http://121.36.12.76:5000/update"/>

    代码为:

     try
                {
                    using (var updateManager = new UpdateManager(LocalSetting.UpdateAddress))
                    {
                        CurrentVersion.Text = $"Current version: {updateManager.CurrentlyInstalledVersion()}";
    
                        LocalSetting.SetAppSetting("Version", updateManager.CurrentlyInstalledVersion().ToString());
    
                        var releaseEntry = await updateManager.UpdateApp();
                        NewVersion.Text = $"Update Version: {releaseEntry?.Version.ToString() ?? "No update"}";
                        if (releaseEntry != null)
                        {
                            this.Visibility = Visibility.Visible;
                            var r = System.Windows.MessageBox.Show("检测到新版本,是否重启更新?");
                            if (r == MessageBoxResult.OK)
                            {
                                UpdateManager.RestartApp();
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    _logger.Log(LogLevel.Error, LogType.系统异常, ex.ToString());
                }

     安装包地址为(欢迎大家下载查看)http://121.36.12.76:5000/setup:

    自动升级包地址为:

     

    好了,至此结束。

    源码地址:艾竹/AIStudio.Wpf.AClient (gitee.com) 

    作者:竹天笑
    互相学习,提高自己。
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    鼠标经过,显示悬浮DIV
    js 循环向上滚动
    Android 全局搜索条写成自定义控件-曹永思
    CYS-Sqlite数据导入工具
    启动Android App时,动态将Sqlite数据库文件导入到手机中类方法
    asp.net 多线程
    1.母版简单创建和使用
    class表与student表之间的关系
    02Del.ashx(删除班级)
    05StuList.aspx(学生列表)
  • 原文地址:https://www.cnblogs.com/akwkevin/p/14538305.html
Copyright © 2011-2022 走看看