搭建Wpf框架(2)——Wpf客户端⽣成安装包与⾃动升级包
小程序开发一键生成平台源码⾸先,vs⾃带⼀键发布功能,但是⼀个⽂件夹打包交付给客户,还需要解压,总显得不够⾼级,优点是⾜够绿⾊。
本⽂介绍两种常⽤的打包⽅式Setup Project和Wix ToolSet。
Setup Project教程⾮常多,不提供链接了,但是那么多教程,⼀个关键点没有说,那就是添加程序主输出,那引⽤的dll怎么办?总不能每增加⼀批dll,就改⼀次打包⼯程。
除了主输出以外,还要添加PublishItemsOutputGroup。这样就能把⽬标⽬录下的⽂件都添加过来。
接下来再说说Wix打包
推荐
详情去链接查看,当然我这⾥也有改进的地⽅,那就是⽬标⽂件夹下的⽂件也不能⾃动添加,但是他是xml编辑项⽬,那么对⼀个程序员来说,那么就可以写个⼩程序,⾃动⽣成了。
先写个模板⽂件,需要替换的地⽅占个位,和代码⽣成⼯具⼀个套路。
上⾯那个红框位置,就可以遍历⽂件夹⾃动添加了,然后替换占位符。源码在AIStudio.Wpf.AClient下的AIStudio.Wpf.WixXmlGenerate⼯程中。
这个时候安装包就能很轻松的⽣成了,但是安装界⾯依旧没什么特⾊。
⼤家可以按照⽤WPF做个漂亮的安装界⾯来做⼀个,原作者搞的⾮常棒,可以拿来直接⽤。wpf界⾯,⼤家也可以按照⾃⼰的想法改。
(尊重⼀下原作者,上的他的图,本框架改成了⾃⼰的log)
最后,再介绍⼀种
这个除了不能定制安装位置和安装提⽰语句,但是⽣成⽅式⾮常简单,⼀个命令就⽣成,还能⾃动⽣成升级包,升级起来简直简单的不要不要。还是增量升级。缺点是,不能定制化。
另外⼀种⾃动升级⽅法是AutoUpdater.NET,缺点是全量升级,怎么增量升级了?各位朋友有好办法吗?
本框架分别集成了这两种升级⽅法的启动项⽬,分别是AIStudio.Wpf.Client和AIStudio.Wpf.Client472。
⾃动升级部分代码如下:
⽰例1配置⽂件为(AutoUpdater.NET)
<add key="ServerIP" value="121.36.12.76:5000"/>
<add key="UpdateAddress" value="121.36.12.76:5000/l"/>
代码为:
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="121.36.12.76:5000"/>
<add key="UpdateAddress" value="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());
}
⾃动升级包地址为:
好了,⾄此结束。
源码地址:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论