WPF 使用Squirrel自动更新应用

article/2025/9/11 1:01:38

前言

本文简单的介绍了如何使用 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


 


http://chatgpt.dhexx.cn/article/htqqOxjl.shtml

相关文章

SQuirrel SQL Client的安装

如果您的工作要求您在一天之中连接许多不同的数据库 &#xff08;oracle、DB2、mysql、postgresql、Sql Server等等&#xff09;&#xff0c;或者你经常需要在多个不同种类的数据库之间进行数导入导出。那么SQuirreL SQL Client 将会是比较理想的数据库客户端链接工具。 简单介…

数据库管理工具——SQuirreL SQL Client使用入门

如果您的工作要求您在一天之中连接许多不同的数据库 &#xff08;oracle、DB2、mysql、postgresql、Sql Server等等&#xff09;&#xff0c;或者你经常需要在多个不同种类的数据库之间进行数导入导出。那么SQuirreL SQL Client 将会是比较理想的数据库客户端链接工具。 简单介…

SQuirrel连接hive配置

1. 简介 最近由于大数据部门相关同事离职&#xff0c;不得不研究一下大数据相关组件&#xff0c;今天成功安装配置Hive&#xff0c;简单记录&#xff0c;一是为了加深印象&#xff0c;二是为以后备用&#xff0c;三是为大家提供参考&#xff0c;避免少踩坑。 在Hive的官网上…

FSM——squirrel状态机使用

FSM——squirrel状态机使用 1 FSM介绍 1.1 概念 FSM&#xff08;finite state machine&#xff09;:有限状态机 是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。核心内容&#xff1a;有限个状态、通过外部操作引起状态的转移。用来对状态的流转进行解耦&a…

Squirrel SQL客户端使用图解

一、Squirrel简介 Squirrel是一个连接数据库的客户端工具&#xff0c;一般支持JDBC的数据库都可以用它来简介&#xff0c;如连接MySQL。 二、安装准备 下载jar包&#xff1a;squirrel-sql-3.7.1-standard.jar 三、安装 ①进入squirrel-sql-3.7.1-standard.jar文件所在的目录…

完成GitHub上squirrel 的运行(数据库的模糊测试)

文章目录 一、squirrel的介绍squirrel链接建议下载Ubuntu 18.04编译安装clang/llvm&#xff08;建议9.0以上&#xff09;将squirrel的文件下载到Ubuntu上下载docker&#xff08;建议按照dockerfile步骤直接在外部搭建环境&#xff09;Dockerfile创建镜像按照dockfile搭建时时有…

连接HiveServer2的图形化工具SQuirrel和Dbeaver

文章目录 SQuirrel SQL Client简介视频演示安装SQuirrel SQL Client启动hdfs和hiveserver2配置SQuirrel SQL Client使用SQuirrel SQL Client访问hive使用Cloudera提供的hive连接驱动进行连接Dbeaver的安装及使用 本文介绍的工具可以通过下面链接下载&#xff1a; 链接&#xff…

squirrel校园二手交易平台

##squirrel校园二手交易平台 &#xff08;适合寻找SSM项目练手的你。&#xff09; 问题汇总&#xff1a; &#xff08;朋友毕设用到了这个二手平台&#xff0c;他自己把后台优化了&#xff0c;我又帮忙实现了一部分功能&#xff0c;只能做到这里了。有兴趣的&#xff0c;自行优…

squirrel sql 使用

前置 安装jdk&#xff08;1.8版本即可&#xff09; 1、官网下载squirrel sql client jar https://sourceforge.net/projects/squirrel-sql/ 2 运行java -jar squirrel-sql-3.6-standard.jar安装 jar包 注意3.0的版本要JDK1.6以上 这里可以改安装目录 这里可以选择插件&#…

[squirrel使用]--Windows安装详解

squirrel在windows下的安装文档 一&#xff0e;下载安装 从网址http://www.squirrelsql.org/下载相应版本的squirrel的安装jar包&#xff0c;比如下载squirrel-sql-3.7-standard.jar双击安装&#xff0c;出现如下安装界面&#xff0c;下一步开始安装 二&#xff0e;配置连接p…

Squirrel状态机-从原理探究到最佳实践

作者&#xff1a;京东物流 郑朋辉 1 简介 Squirrel状态机是一种用来进行对象行为建模的工具&#xff0c;主要描述对象在它的生命周期内所经历的状态&#xff0c;以及如何响应来自外界的各种事件。比如订单的创建、已支付、发货、收获、取消等等状态、状态之间的控制、触发事件…

squirrel(松鼠)状态机的介绍及使用

squirrel&#xff08;松鼠&#xff09;状态机 依赖 <dependency><groupId>org.squirrelframework</groupId><artifactId>squirrel-foundation</artifactId><version>0.3.8</version> </dependency>状态机描述 参考&#xf…

将图片转换为base64编码

1、base64编码简介 Base64是一种可逆的编码方式&#xff0c;简单来讲就是一种将64个Ascii字符来表示成二进制数据的方法。主要用于将不可打印的字符转换成可打印字符&#xff0c;或者简单的说将二进制数据编码成Ascii字符。Base64是网络上最常用的传输8bit字节数据的编码方式之…

前端理解base64

一、背景&#xff1a;ascii码 字符>二进制 计算机中所有数据的存储都是以二进制模式&#xff0c;比如想要存储abcd需将其转化为二进制&#xff0c;具体用哪些二进制来表示哪个符号*&#xff0c;有一个统一的编码规则&#xff0c;这就是ascii。 ASCII 码使用指定的7 位或8…

Web 图片Base64编码

转载自: 【前端攻略】&#xff1a;玩转图片Base64编码 引言   图片处理在前端工作中可谓占据了很重要的一壁江山。而图片的 base64 编码可能相对一些人而言比较陌生&#xff0c;本文不是从纯技术的角度去讨论图片的 base64 编码。标题略大&#xff0c;不过只是希望通过一些…

base64编码解码器【C++】

在线编码解码工具https://base64.us/所有结果可以使用上述网站检验。 什么是base64编码&#xff1f; base64编码是一种编码方式 用64 1 个字符表示字符 本质是将三位8比特字符扩增为四位8比特字符&#xff0c;但是这么说开始可能很闷逼。 给个图&#xff0c;这个编码是以3字…

前端图片在线转换Base64 图片编码Base64

首先讲一下什么是图片Base64编码&#xff1a; 简单来说&#xff0c;图片的base64编码就是可以将一副图片数据编码成一串字符串&#xff0c;使用该字符串代替图像地址。 为什么要用Base64&#xff1f; 我们知道&#xff0c;我们所看到的网页上的每一个图片&#xff0c;都是需…

理解图片base64编码

什么是编码解码 编码&#xff1a;利用特定的算法&#xff0c;对原始内容进行处理&#xff0c;生成运算后的内容&#xff0c;形成另一种数据的表现形式&#xff0c;可以根据算法&#xff0c;再还原回来&#xff0c;这种操作称之为编码。 解码&#xff1a;利用编码使用的算法的…

【HTML5】------- 图片Base64编码详解

引言   图片处理在前端工作中可谓占据了很重要的一壁江山。而图片的 base64 编码可能相对一些人而言比较陌生&#xff0c;本文不是从纯技术的角度去讨论图片的 base64 编码。标题略大&#xff0c;不过只是希望通过一些浅显的论述&#xff0c;让你知道什么是图片的 base64 编码…

记录:Base64编码步骤详解

文章目录 具体转换步骤实例演示&#xff1a;AbC实例演示二&#xff1a;字节数不足三个例&#xff1a;A例&#xff1a;8H ASCII编码表Base64编码表 具体转换步骤 第一步&#xff0c;将待转换的字符串每三个字节分为一组&#xff0c;每个字节占8bit&#xff0c;那么共有24个二进…