前言

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

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

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

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

开始
第一步: 新建一个项目
打开VS2022,新建wpf项目,取名为 WpfApp2.

右键项目 WpfApp2>点击管理NuGet程序包

搜索squirrel.windows>点击安装


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

主要显示当前版本和最新版本信息

<Window x:Class="WpfApp2.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp2"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid><StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"><Label FontSize="20">当前版本:</Label><TextBox x:Name="CurrentVersionTextBox"IsReadOnly="True"  FontSize="20"></TextBox><Label  FontSize="20">最新版本:</Label ><TextBox x:Name="UpdateVersionTextBox"IsReadOnly="True"  FontSize="20"></TextBox>           </StackPanel></Grid>
</Window>

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

using Squirrel;

并添加MainWindow的OnLoaded事件:

  /// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{   public MainWindow(){InitializeComponent();Loaded += MainWindow_Loaded;}private void MainWindow_Closed(object sender, EventArgs e){MessageBox.Show("关闭");}private async void MainWindow_Loaded(object sender, RoutedEventArgs e){try{using (var updateManager = new UpdateManager(@"F:\SquirrelReleases")){CurrentVersionTextBox.Text = $"{updateManager.CurrentlyInstalledVersion()}";var releaseEntry = await updateManager.UpdateApp();UpdateVersionTextBox.Text = $"{releaseEntry?.Version.ToString() ?? "No update"}";if (releaseEntry != null){var r = MessageBox.Show("检测到新版本,是否重启更新?");if (r == MessageBoxResult.OK){UpdateManager.RestartApp();}}}}catch (System.Exception ex){MessageBox.Show(ex.Message);}         }}

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

step.2 打包应用程序

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

https://www.nuget.org/downloads

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

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

<?xml version="1.0" encoding="utf-8"?>
<package ><metadata><id>ApplicationWPF</id><version>0.0.0</version><title>Title</title><authors>Author</authors><requireLicenseAcceptance>false</requireLicenseAcceptance><license type="expression">MIT</license><projectUrl>http://project_url_here_or_delete_this_line/</projectUrl><iconUrl>http://icon_url_here_or_delete_this_line/</iconUrl><description>Description</description><releaseNotes>Summary of changes made in this release of the package.</releaseNotes><copyright>$copyright$</copyright><tags>Tag1 Tag2</tags></metadata><files><file src="bin\Release\**" target="lib\net48" exclude="*.pdb;*.vshost.*"/></files>
</package>

切换到release,并生成项目:

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

nuget pack SquirrelTest.nuspec 


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

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

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

先打开程序包管理器控制台

Squirrel --releasify SquirrelTest.0.0.0.nupkg --releaseDir "F:\SquirrelReleases"

这里F:\SquirrelReleases地址也可以放在远程服务器上


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

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

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

打开桌面快捷方式,展开如下

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

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

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

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

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

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

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

本文引用了以下文章:

https://blog.csdn.net/wf824284257/article/details/89164525

Application Deployment Made Easy - IntelliTect

https://www.youtube.com/watch?v=UlNwQ6WqCMw

WPF 使用Squirrel自动更新应用相关推荐

  1. wpf入门第七篇 使用Squirrel自动更新应用

    前言 本文是wpf入门系列第7篇,面向有winform或者web前端基础的.并且也有C#基础的同学. 本文简单的介绍了如何使用 Squirrel 来为 WPF 客户端 进行自动检查更新. Squirr ...

  2. CleanAOP实战系列--WPF中MVVM自动更新

    CleanAOP实战系列--WPF中MVVM自动更新 作者: 立地 邮箱: jarvin_g@126.com QQ: 511363759 CleanAOP介绍:https://github.com/J ...

  3. Winform窗体应用程序的自动更新功能

    本文将演示一种桌面程序自动更新方案,其步骤比较多,但原理非常简单,通用性尚可,对于小型应用来说,直接拿去就可以用了. 原理 服务器端的结构是这样的: 其工作原理如下: Update.asmx 仅提供一 ...

  4. 一起谈.NET技术,自动更新组件分享

    一. 摘要 前两天在博客上发布了一篇英文的自动更新组件文章Release a AutoUpdater tool,那么在这篇文章中,我们也对其功能进行一些简单说明,这个组件非常简单,所以大家可以下载进行 ...

  5. Winform自动更新组件分享

    作者:圣殿骑士  出处:http://www.cnblogs.com/KnightsWarrior/  关于作者:专注于微软平台项目架构.管理和企业解决方案.自认在面向对象及面向服务领域有一定的造诣, ...

  6. rowspan不显示 wpf_wpf的datagrid绑定datatable列不自动更新解决方案

    wpf的datagrid绑定datatable列不自动更新 描述如下: 想利用程序实现显示NORTHWND.MDF中的所有表.listbox显示数据库中的表清单,选中listbox里面的一项以后,在d ...

  7. 简单的自动更新程序实现

    本文将演示一种桌面程序自动更新方案,其步骤比较多,但原理非常简单,通用性尚可,对于小型应用来说,直接拿去就可以用了. 原理 服务器端的结构是这样的: 其工作原理如下: Update.asmx仅提供一个 ...

  8. C# 实现软件自动更新升级程序

    Update.asmx仅提供一个功能,就是检测是否需要更新,在需要更新的时候就返回一个更新地址,通常情况下返回的地址就是Download.ashx,而在某些特殊情况下,也可以修改服务端使之从其他Url ...

  9. 艾伟_转载:简单的自动更新程序实现

    本文将演示一种桌面程序自动更新方案,其步骤比较多,但原理非常简单,通用性尚可,对于小型应用来说,直接拿去就可以用了. 原理 服务器端的结构是这样的: 其工作原理如下: Update.asmx仅提供一个 ...

最新文章

  1. 微服务实践分享(2)api网关
  2. Grunt-cli的执行过程以及Grunt加载原理
  3. 美国远程MBA全面占领MBA市场
  4. mysql中phpmyadmin安装教程_phpMyAdmin 安装教程全攻略
  5. 抖音诉腾讯不正当竞争案撤诉;微信更新,表情包上限999个;PyTorch 1.8.1 发布 | 极客头条...
  6. vue-html5-editor接收数据,在vue中获取wangeditor的html和text的操作
  7. ARC 环境下 dealloc 的使用误区
  8. sop8封装尺寸图_IC封装原理及功能特性汇总
  9. 水系图一般在哪里找得到_水系电池再发Nature,事实力证或将迎来发展的春天!...
  10. JAVA中对集合排序
  11. python人机猜拳随机,python实现人机猜拳小游戏
  12. My Neighbor Alice新一轮土地销售分析
  13. 测试用例(微信发朋友圈/评论/点赞/搜索/购物车)
  14. 温度PID的整定过程
  15. 抓取报表ALV GRID上的数据 转于elliott
  16. 英国电信日本东芝公开测试英国首个商用量子安全城域网
  17. idea2019本地导入lombok不兼容问题
  18. Navicat Premium 15 “rsa public key not find”解决方法
  19. Wamp错误: Forbidden You don't have permission to access / on this server.
  20. 电子烟新规颁发,经销商该如何应对全新的电子烟管理办法?(内含电子烟许可证/电子烟牌照/电子烟营业执照申请指南)

热门文章

  1. easypoi导出Excel根据内容如何自动换行和自动调整行高
  2. MySQL 权限与备份管理
  3. android腾讯云im刷新会话列表,融云 IM SDK 集成 --- 刷新会话界面和会话列表界面...
  4. FFT变换的C语言实现
  5. win10系统正在锁定计算机,怎样一息屏电脑就上锁win10
  6. 《软件供应商手册:SBOM的生成和提供》解读
  7. 基于贝叶斯算法的文本分类算法
  8. python爬虫练习--爬取站长素材中免费简历模板
  9. C++ STL begin()和end()函数(深入了解,一文学会)
  10. 【WP7】关于磁贴的使用