告别手动更新!WinForm 应用轻松集成自动升级功能 (HHUpdateApp)
前言
在桌面应用开发领域,版本更新始终是影响用户体验的关键环节。传统的更新方式不仅操作繁琐,还常伴随兼容性风险。对于桌面应用程序而言,实现一个高效且用户友好的自动更新机制尤为重要。
今天推荐一款专为 .NET 经典桌面应用设计的轻量级工具,以极简配置实现无缝更新,让大家告别复杂的脚本编写,专注于核心业务逻辑。
项目介绍
HHUpdateApp 是一个基于 .NET 框架的桌面应用程序,专为简化传统桌面应用的自动更新流程而设计。通过 HHUpdateApp,开发可以轻松为其现有的应用程序添加自动更新特性,无需深入研究复杂的脚本工具或部署策略。
只需简单的配置和集成,就能让大家的应用程序具备自我更新的能力,显著提升用户体验和满意度。
项目功能
HHUpdateApp 的核心功能在于其能够自动化处理从服务器获取最新版本信息到下载并安装更新包的整个过程。
首先,它会检查指定的 JSON 文件(HHversions.json),该文件包含了最新的版本信息和下载链接。如果发现新版本,HHUpdateApp 会提示用户进行更新,并在用户同意后自动下载并解压更新包,替换旧版文件。
另外,还支持静默更新模式,允许更新过程在后台进行,不打扰用户的正常使用。
项目说明
下载Releases中最新安装包,即刻体验全部功能,无需涉足各种脚本工具,只需面对你所需要升级的程序本身,让应用程序轻松获得自动升级的特性。
在上手前,有些名词是需要我们了解的。
升级程序:HHUpdateApp.exe是一个可执行程序,她提供了升级支持。下面文档中的【升级程序】代指HHUpdateApp.
业务程序:是指你自己的程序,例如你有一个LOLClient.exe程序,我们称它为业务程序.
HHUpdateApp.exe.config:升级程序的参数配置,里面包含【升级程序】工作时所需要的一些参数,祥见开发者使用
HHversions.json:升级版本信息文件,这个文件包含了【业务程序】的升级信息,它是json格式的文件,放置在远端电脑或服务器上,【升级程序】升级时,会请求该文件,以获得升级信息.
项目使用
升级程序原理
【升级程序】从您的服务器下载包含更新信息的JSON文件(HHversions.json)。它使用此JSON文件来获取需要检测更新的PC上【业务程序】有关最新版本的信息。
如果服务器上该【业务程序】的最新版本大于在用户PC上的当前版本,则HHUpdateApp将向用户显示更新对话框。
如果用户按下更新按钮来更新软件,则它将从【HHversions.json)】文件中提供的URL下载更新文件(zip文件)。
之后执行更新是安装程序的工作,HHUpdateApp会将zip文件的内容提取到应用程序目录中替换升级原应用程序文件。
直接点击【HHUpdateApp.exe】,只需要填写【业务应用程序名称】(例如LOLClient)即可体验的为你的LOLClient.exe应用程序检查更新。
开发使用
1、配置HHUpdateApp.exe.config
配置升级程序,此处是HHUpdateApp.exe运行是需要的一些参数,可以手动配置好。
如果没有配置,更新程序运行时,会进入配置页,要求配置。
两种方式均可以。
<HHUpdateApp.Properties.Settings>
<!--业务应用程序名称:根据这个值,找到业务应用程序,并为它赋予自动更新的功能-->
<setting name="LaunchAppName" serializeAs="String">
<value />
</setting>
<!--服务地址:HHUpdateApp.exe将下载此处提供的HHversions.json文件(包含版本更新信息的JSON文件)-->
<setting name="ServerUpdateUrl" serializeAs="String">
<value>http://localhost:8020/HHversions.json</value>
</setting>
<!--非必要参数,用于记录忽略的一个版本号:检查更新时会忽略这个版本的更新-->
<setting name="LocalIgnoreVer" serializeAs="String">
<value />
</setting>
<!--非必要参数,是否静悄悄升级:true,更新过程中不显示界面;false,显示更新界面-->
<setting name="SilentUpdate" serializeAs="String">
<value>False</value>
</setting>
</HHUpdateApp.Properties.Settings>
2、在【应用程序】中添加代码以使其对HHUpdateApp发起调用
添加调用检测升级更新的方法,以WinForm程序为例,在应用程序中添加{检查更新}按钮,该检查更新按钮,代码如下
| 参数 | 类型 | 说明 |
|---|---|---|
| FileName | string | 【升级程序】HHUpdateApp.exe程序所在路径 |
| Arguments | string[] | 参数数组:Arguments[0]:发起更新的应用名称(例如,LOLClient);Arguments[1]:检查模式:0 表示定时检查(自动更新),1 表示手动检查 |
/// <summary>
/// 检查更新按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
ProcessStartInfo processStartInfo = new ProcessStartInfo()
{
FileName = "~\HHUpdateApp.exe",//参数:【升级程序】HHUpdateApp.exe程序所在路径
Arguments = "LOLClient 1"//参数1:【应用程序】的名词,例如:LOLClient;参数1:检查更新模式
;
Process proc = Process.Start(processStartInfo);
if (proc != null)
{
proc.WaitForExit();
}
}
3、HHversions.json
发布版本信息HHversions.json。将HHversions.json文件放在【升级程序】可访问的服务器或远程电脑上。升级版本信息文件,这个文件包含了【业务程序】的升级信息,它有固定的格式,如下所示.注意:HHversions.json必须是UTF8格式
{
"ApplicationStart": "更新工作结束后启动的业务程序名,多个启动用 # 号分割",
"ReleaseDate": "发布时间",
"ReleaseUrl": "zip更新包发布地址",
"ReleaseVersion": "发布版本号",
"UpdateMode": "更新方式:Cover表示覆盖原文件更新,NewInstall表示删除源文件全新安装",
"VersionDesc": "更新描述说明",
"IgnoreFile": "更新过程中忽略的文件,多个文件用 # 号分割"
}
程序示例
更新弹窗






上面示例中使用的代码片段
/// <summary>
/// 检查更新按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
string _updateAppPath = textBox1.Text;//输入升级程序所在目录
if (File.Exists(_updateAppPath))//升级程序是否存在
{
ProcessStartInfo processStartInfo = new ProcessStartInfo()
{
FileName = _updateAppPath,//路径
Arguments = "LOLClient 1"//此需要升级的应用程序名
};
Process proc = Process.Start(processStartInfo);
if (proc != null)
{
proc.WaitForExit();
}
}
}
上面示例中使用的HHversions.JSON文件
{
"ApplicationStart": "HHUpdate.Test.exe",
"ReleaseDate": "2020520",
"ReleaseUrl": "http://localhost:8085/UpdateDemo/Debug.zip",
"ReleaseVersion": "1.0.0.1",
"UpdateMode": "Cover",
"VersionDesc": "一个有趣的故事,当我们最初准备重做乐芙兰时已经准备好了这个BUG的修复,但最后并没有实装,因为这个技能被取代了。\r\n1,修复了一个BUG,【被动 - 镜花水月】所召唤的分身在普攻命中前阵亡,那么她所进行的普攻会造成伤害。\r\n2,新增:【恶意魔印】将为目标施加一个印记。\r\n3,乐芙兰重做后的大招理应让她能够选择复制哪个技能来做出更有趣的连招。",
"IgnoreFile": ""
}
项目源码
只需从 Releases 页面下载最新的安装包,按照文档中的指南完成基本配置即可。
Gitee:https://gitee.com/Chadwuo/HHAutoUpdate.NET
总结
HHUpdateApp 提供一种简便有效的解决方案,用于为传统的桌面应用程序添加自动更新功能。它通过清晰的设计理念和强大的功能性,帮助开发克服了更新管理上的挑战。
不管是提高工作效率还是增强用户体验,HHUpdateApp 都展现出了其独特价值。随着未来更多特性的加入和技术优化,我们有理由相信它将在桌面应用开发领域扮演更加重要的角色。
关键词
HHUpdateApp、.NET、自动更新、桌面应用、JSON、用户体验、开源、C#、HTTP、ZIP
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

告别手动更新!WinForm 应用轻松集成自动升级功能 (HHUpdateApp)的更多相关文章
- NSIS:应用软件自动升级功能的探索与实践
原文 NSIS:应用软件自动升级功能的探索与实践 记得以前轻狂曾分享过使用第三方软件实现应用软件自动升级功能 (详细http://www.flighty.cn/html/soft/20110106_1 ...
- Delphi程序的自动升级功能的实现(AutoUpdate使用指南)
在UtiMnid组件下,利用auAutoUpgrader实现自动升级(已经测试通过) 第一步:下载AutoUpgrader.Pro.v4.6.4. 第二步:打开AutoUpgrader.Pro.v4. ...
- Android 一s个相对完整的自动升级功能实现代码
由于项目的需要最近做了一个关于Android自动升级的功能,下面将贴出Android手机客户端的完整代码.这段代码参考别的代码居多,由于不满足需求,所以自己仅仅改了一些需要变动的内容,其他功能都是按照 ...
- Android 一个相对完整的自动升级功能实现代码
由于项目的需要最近做了一个关于Android自动升级的功能,下面将贴出Android手机客户端的完整代码.这段代码参考别的代码居多,由于不满足需求,所以自己仅仅改了一些需要变动的内容,其他功能都是按照 ...
- ionic2 rc2 添加版本更新自动升级功能
不废话,直接上代码 首先安装四个必备的插件: cordova plugin add cordova-plugin-app-version //获取APP版本 cordova plugin add co ...
- 在WinForm中使用Web Service来实现软件自动升级
来源:互联网 winform程序相对web程序而言,功能更强大编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术 ...
- 在WinForm中使用Web Services 来实现 软件自动升级( Auto Update ) (C#)
winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术方案,弥补了 ...
- 在WinForm中使用Web Services 来实现 软件 自动升级( Auto Update ) (C#)
winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术方案,弥补了 ...
- SNFAutoupdater通用自动升级组件V2.0
1.组件介绍 C/S构的特点是能充分发挥客户端的处理能力,很多工作可以由客户端处理后再提交给服务器,对应的优点就是客户端响应速度快模式客户端以其强大的功能,丰富的表现力受到相当大部分用户的青睐,但是客 ...
- NetworkComms 文件上传下载和客户端自动升级(非开源)
演示程序下载地址:http://pan.baidu.com/s/1geVfmcr 淘宝地址:https://shop183793329.taobao.com 联系QQ号:3201175853 许可:购 ...
随机推荐
- Git回滚命令reset|回退代码到某次commit
摘要:使用Git回退命令reset回退代码到某次commit. 需求背景: 需要回滚提交的代码的场景常常是如下三个: 提交代码到错误Git分支: 提交的代码不需要上线了,而同一分支有需要上线的代码 ...
- Mysql 修改、删除字段默认值
问题描述: 建表的时候,某个表中的字段设置了默认值,后期发生需求变更,不需要提供默认值,或者需要改为其它默认值. 问题解决: alter table 表名 alter column 字段名 drop ...
- 在Matlab中如何计算决定系数R^2和相关系数r
Problem 当你使用 polyfit 函数进行多项式拟合之后,你希望计算决定系数或者相关系数看看拟合效果如何.聪明的你肯定觉得聪明的 Matlab 的 polyfit 函数的返回值中会有 \(R^ ...
- 超实用!Dify调用Java的3种实现方式!
在一些复杂的业务中,我们可能需要使用 Dify 调用外部程序(如 Java 程序),因为这样才能满足业务的特殊需求. 例如,当我们使用 Dify 实现"AI 简历自动筛选器"的时候 ...
- 一个基于 .NET 开源、模块化 AI 图像生成 Web 用户界面
前言 今天大姚给大家分享一个基于 .NET 开源.模块化 AI 图像生成 Web 用户界面:SwarmUI. 项目介绍 SwarmUI (原 StableSwarmUI)是一个基于 .NET 开源(M ...
- Java集合--LinkedList源码可视化
集合节点保存的都是对象的引用,而非具体值,文中案例仅仅为了方便实现原理的演示. 1. 底层数据结构 LinkedList 基于 双向链表 实现,内部通过 Node<E> 节点相互连接: p ...
- 数栈大数据组件:Hive优化之配置参数的优化
Hive是大数据领域常用的组件之一,主要用于大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中是经常涉及的一个点,因此掌握一些Hive调优是必不可少的一项技能.影响Hive效率的主要因素有 ...
- BIO, NIO, AIO 大白话 - 澄澈大学生也能搞懂
最近天天吃沙县, 就拿沙县分析 BIO Block I/O 沙县分析 相近时间来了4个顾客 顾客 菜品 时间 A 筒骨饭 5min B 茄子肉丝盖饭 7min C 猪脚饭 3min D 茄子肉丝盖饭 ...
- 工程师都喜欢的一款自动生成网格的仿真软件——Hyperworks到底好不好用?
HyperWorks是一款广泛应用于工程仿真和优化的软件平台,其中包括了许多强大的工具和功能.其中的网格自动生成工具是其重要组成部分之一,对于工程仿真和优化来说具有重要的意义.那么,HyperWork ...
- Java源码分析系列笔记-10.CopyOnWriteArrayList
目录 1. 是什么 2. 如何使用 3. 原理 3.1. 构造方法 3.2. add方法 3.2.1. 先加锁 3.2.2. 复制数组并在这份数组上操作 3.2.3. 将复制的数组set回属性 3.3 ...