搭建Wpf框架(2) —— Wpf客户端生成安装包与自动升级包
AIStudio框架汇总及介绍
首先,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"/>
代码为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <br> 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()); } |
对比
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 示例2配置文件为:(Squirrel) 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()); } |
<add key="ServerIP" value="http://121.36.12.76:5000"/>
<add key="UpdateAddress" value="http://121.36.12.76:5000/update"/>
代码为:
安装包地址为(欢迎大家下载查看)http://121.36.12.76:5000/setup:
自动升级包地址为:
好了,至此结束。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类