前言

本文是wpf入门系列第7篇,面向有winform或者web前端基础的、并且也有C#基础的同学。

本文简单的介绍了如何使用 Squirrel 来为 WPF 客户端 进行自动检查更新。

Squirrel git 地址 : https://github.com/Squirrel/Squirrel.Windows

本文使用了 Visual Studio 2017 进行演示讲解。

参考英文博客: https://intellitect.com/deploying-app-squirrel/

wpf入门系列导航页面: https://blog.csdn.net/wf824284257/article/details/88757497

上一步: WPF入门第6篇 界面绑定属性刷新 INotifyPropertyChanged
https://blog.csdn.net/wf824284257/article/details/89083825

开始

step.1 建立测试项目

打开VS2017,新建wpf项目,取名为 SquirrelTest .

点击【工具】->【Nuget包管理器】->【程序包管理器控制台】,输入以下命令来安装Squirrel:

PM> Install-Package Squirrel.Windows

安装完成后,打开MainWindow.xaml,编辑Grid段代码如下:

<Grid><StackPanel VerticalAlignment="Center" HorizontalAlignment="Center" TextElement.FontSize="20"><TextBlock x:Name="CurrentVersion" Text="Loading..."/><TextBlock x:Name="NewVersion" /></StackPanel>
</Grid>

打开MainWindow.xaml.cs,添加Squirrel引用,

using Squirrel;

并添加MainWindow的OnLoaded事件:

public MainWindow()
{InitializeComponent();this.Loaded += MainWindow_OnLoaded;
}
private async void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
{using (var updateManager = new UpdateManager(@"D:\SquirrelReleases")){CurrentVersion.Text = $"Current version: {updateManager.CurrentlyInstalledVersion()}";var releaseEntry = await updateManager.UpdateApp();NewVersion.Text = $"Update Version: {releaseEntry?.Version.ToString() ?? "No update"}";if (releaseEntry != null){var r = MessageBox.Show("检测到新版本,是否重启更新?");if(r== MessageBoxResult.OK){UpdateManager.RestartApp();}}}
}

测试项目准备完成。接下来我们需要进行打包以及版本更新的测试。

step.2 打包应用程序

首先需要下载 nuget.exe recommended latest:

https://www.nuget.org/downloads

将下载到的nuget.exe复制到项目根目录下。

接下来在项目中添加一个 SquirrelTest.nuspec ,编辑内容为下面内容:

<?xml version="1.0"?>
<package >
<metadata><id>SquirrelTest</id><version>1.0.0</version><authors>Me</authors><owners>Me</owners><description>SquirrelTest</description><releaseNotes>Initial release.</releaseNotes><copyright>Copyright ©  2019</copyright>
</metadata>
<files><file src="bin\Release\*.*" target="lib\net45\" exclude="*.pdb;*.vshost.*"/>
</files>
</package>

切换到release,并生成项目:

使用管理员身份运行cmd,并切换到项目根目录,运行下面命令:

nuget pack SquirrelTest.nuspec

这条命令将会在项目根目录生成一个 SquirrelTest.1.0.0.nupkg 的文件。

在D盘根目录下新建 SquirrelReleases 文件夹。

切换到VS的程序包管理界面控制台,输入下面命令:

Squirrel --releasify SquirrelTest.1.0.0.nupkg --releaseDir "D:\SquirrelReleases"

若报错,需要输入pwd查看当前目录,并切换到项目跟目录。 通常情况下需要先执行一次cd:

cd SquirrelTest

执行完后的界面显示如下:

此时到D盘下的 SquirrelReleases 文件夹查看,可以发现生成了下面的文件。

双击Setup.exe,程序将会自动安装到 %AppData% 目录下,创建桌面快捷方式,并运行。

step.3 应用程序的自动更新

在MainWindow的Loaded事件中已经有新版本检测并更新的代码了。下面我们只需要发布新版本,在程序启动时将会自动提示更新。

打开SquirrelTest.nuspec文件,修改version为1.0.1。重新生成项目。

再次以管理员身份运行cmd,切换到项目目录,执行 nuget pack 命令。此时生成的文件为 SquirrelTest.1.0.1.nupkg .

切换到vs的程序包管理器命令行,输入下面命令:

Squirrel --releasify SquirrelTest.1.0.1.nupkg --releaseDir "D:\SquirrelReleases"

执行完毕后,双击桌面的SquirrelTest快捷方式,将会收到新版本提示:

点击弹窗的确定按钮后,应用将会以新版本重启:

在实际应用中 只需要把 D:\SquirrelReleases 改为服务器某目录即可

结束

本文通过一个小的测试项目来简单说明了如何使用Squirrel来为wpf项目进行自动更新。

若有不足请指正,若有不解可留言,感谢。

wpf入门第七篇 使用Squirrel自动更新应用相关推荐

  1. Android入门第七篇之ListView (二)

    Android入门第六篇之ListView (一) ,讲的是如何制作一个具有两行文本的 自定义控件 ,作为ListView的Item的使用方法.这篇接下来也是围绕ListView和Item,更加深入地 ...

  2. WPF入门第六篇 WPF的Binding

    WPF的Binding 在传统的Windows软件中,大部分都是UI驱动程序的模式,也可以说事件驱动程序.WPF作为Winform的升级,它把UI驱动程序彻底改变了,核心回到了数据驱动程序的模式上面, ...

  3. WPF入门第四篇 WPF模板

    WPF模板 1.ControlTemplate 上一篇已经试用过控件模板,我们知道WPF的控件都是继承自Control,在Control类中有一个Template属性,类型就是ControlTempl ...

  4. Avalonia跨平台入门第七篇之RadioButton的模板

    前面其实已经玩耍过单选按钮,只不过一直好意思分享出来;今天终于可以正大光明的分享出来了,直接看效果吧: 第一次使用然后的傻傻的版本(根据单选按钮的选中状态来切换二个图片);真的好Low: 样式写法和W ...

  5. WPF入门第三篇 ControlTemplate、Trigger与Storyboard

    ControlTemplate.Trigger与Storyboard ControlTemplate通常用在Style中,Trigger通常作为ControlTemplate的一部分,StoryBoa ...

  6. Android JNI入门第七篇——C调用Java

    关键代码: java: [java] view plaincopy print? public class CCallJava { public static String getTime() { L ...

  7. 嵌入式学习之Qt入门第七篇

    恩恩,终于看对版本了~ 感觉代码看的差不多了,今天把代码里面以前不太明白的问题了解了下. 比如关于文件描述符(File Descriptor)的. fd=open("/dev/leds0&q ...

  8. java 读取邮件正文_JavaMail入门第五篇 解析邮件

    上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类 ...

  9. LabVIEW入门第七天(数值控件)

    LabVIEW入门第七天 欢迎大家阅读本篇文章,今天给大家介绍数值控件,欢迎有兴趣的一起学习探讨. 一,LabVIEW数值控件的位置及含义 数值控件代表数值类型,也是编程常用类型之一.数值分为多种类型 ...

最新文章

  1. mongodb插入文档时不传ObjectId
  2. 简单剖析C语言中的位扩展问题
  3. linux文件系统启动流程 ---笔记整理
  4. 面试项目 java-服务端 18h58
  5. pycharm项目目录结构_「Actix-web项目」-项目整体目录结构
  6. 计算机网络学习笔记:第三章
  7. qvalue: Check that you have valid p-values or use a different range of lambda
  8. mysql force_MySQL force Index 强制索引概述
  9. linux grub内核选择,UBUNTU GRUB没有内核选项,怎么回事啊?
  10. 620安装linux_Linux运维基础 Linux的quot;桑巴quot;
  11. js中对datagrid ,repeater的checkbox进行全选反选
  12. Linux 计算器程序
  13. SPSS应用程序无法启动,因为应用程序的并行配置不正确。请参阅应用程序事件日志,或使用命令行sxstrace.exe工具。
  14. 2022-车道线检测综述
  15. 代码随想录第十三天 LeetCode 239、347(队列)
  16. 【GIS教程】ArcGIS做日照分析(附练习数据下载)
  17. 【排列组合】扑克牌大小王被同一人拿到概率
  18. Cadence OrCAD Capture 打印图纸的某一个部分的方法
  19. 怎样在苹果电脑上用移动硬盘(使用NTFS格式硬盘)?
  20. Oracle数据库实现分页

热门文章

  1. 迅雷2014C++研发笔试卷C解题分析
  2. 「订单」业务的设计与实现
  3. 生成CA根证书、公钥、私钥指令(数字证书)
  4. win10:mingw-w64安装教程
  5. Spring Data Redis学海拾贝
  6. Deep-Residual-Shrinkage-Networks模型
  7. uniapp swiper 添加视频
  8. request.getPathInfo() 方法的作用
  9. Spring Cloud OAuth2中访问/oauth/token报Unsupported grant type: password问题的解决
  10. 张赐荣:计算机网络快速入门教程