告别手动更新!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 许可:购 ...
随机推荐
- Linux ls 查看目录结构与文档信息
摘要:Linux ls命令用于列出目标目录中所有的子目录和文件,发掘并掌握ls命令及其参数设置可以驾轻就熟地管理文件,随心所欲地浏览并确定所在的位置! ls命令介绍 今天,楼兰胡杨继续跟各位猿友一 ...
- Intellij Idea 通过svn或者git提交代码时速度慢的解决办法
问题分析:在使用 IntelliJ IDEA 操作Git的时候,Git响应速度特别满,等待差不多10秒.甚至更长时间才完成操作,真是等的花儿都谢了. 解决方案:更改IntelliJ IDE ...
- docker基础学习笔记
Docker安装 Docker基本组成 docker架构图 安装步骤 官网安装参考手册:https://docs.docker.com/engine/install/ubuntu/ 卸载旧版本 for ...
- 基于腾讯云EdgeOne的自适应webp转换
基于腾讯云EdgeOne的自适应webp转换 EdgeOne是腾讯云提出的边缘计算相关产品,和CloudFlare的小黄云类似,实际上大致等于CDN+安全防护,同时它还提供了边缘函数来提供我们使用,我 ...
- Kubernetes存储-Ceph存储
Kubernetes存储-Ceph存储 原文链接:https://www.qikqiak.com/k8strain/storage/ceph/#_11 简介 Ceph 是一个统一的分布式存储系统,提供 ...
- Java IO<1>File类
java.io.File类 文件和文件目录路径的抽象表示形式,与平台无关 File 能新建.删除.重命名文件和目录,但 File 不能访问文件内容本身. 如果需要访问文件内容本身,则需要使用输入/输出 ...
- Dify实战案例:MySQL查询助手!嘎嘎好用
有了 AI 之后,我们在查询数据库的时候就不需要使用数据库客户端或程序(如 Java.Python)来查询了,我们可以直接使用 AI 来查询数据库,并且查询语句都不用你来写了,AI 会自动帮你生成. ...
- 开源直播课丨高效稳定易用的数据集成框架——ChunJun类加载原理与实现
一.直播介绍 前几期,我们为大家分享了ChunJun的数据还原.Hive事务表及传输模块的一些内容,本期我们为大家分享ChunJun类加载原理与实现. 本次直播我们将从Java 类加载器解决类冲突基本 ...
- SpringBoot + Junit5 + MockMvc 写单元测试
1.1 junit5 版本5.6.0 pom文件如下: <properties> <junit.jupiter.version>5.6.0</junit.jupit ...
- FastAPI WebSocket:你的双向通信通道为何如此丝滑?
扫描二维码 关注或者微信搜一搜:编程智域 前端至全栈交流与成长 发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/ # 示例代码运行环境 # Pyt ...