告別手動(dòng)更新!WinForm 應(yīng)用輕松集成自動(dòng)升級(jí)功能 (HHUpdateApp)
前言
在桌面應(yīng)用開(kāi)發(fā)領(lǐng)域,版本更新始終是影響用戶體驗(yàn)的關(guān)鍵環(huán)節(jié)。傳統(tǒng)的更新方式不僅操作繁瑣,還常伴隨兼容性風(fēng)險(xiǎn)。對(duì)于桌面應(yīng)用程序而言,實(shí)現(xiàn)一個(gè)高效且用戶友好的自動(dòng)更新機(jī)制尤為重要。
今天推薦一款專為 .NET 經(jīng)典桌面應(yīng)用設(shè)計(jì)的輕量級(jí)工具,以極簡(jiǎn)配置實(shí)現(xiàn)無(wú)縫更新,讓大家告別復(fù)雜的腳本編寫(xiě),專注于核心業(yè)務(wù)邏輯。
項(xiàng)目介紹
HHUpdateApp 是一個(gè)基于 .NET 框架的桌面應(yīng)用程序,專為簡(jiǎn)化傳統(tǒng)桌面應(yīng)用的自動(dòng)更新流程而設(shè)計(jì)。通過(guò) HHUpdateApp,開(kāi)發(fā)可以輕松為其現(xiàn)有的應(yīng)用程序添加自動(dòng)更新特性,無(wú)需深入研究復(fù)雜的腳本工具或部署策略。
只需簡(jiǎn)單的配置和集成,就能讓大家的應(yīng)用程序具備自我更新的能力,顯著提升用戶體驗(yàn)和滿意度。
項(xiàng)目功能
HHUpdateApp 的核心功能在于其能夠自動(dòng)化處理從服務(wù)器獲取最新版本信息到下載并安裝更新包的整個(gè)過(guò)程。
首先,它會(huì)檢查指定的 JSON 文件(HHversions.json),該文件包含了最新的版本信息和下載鏈接。如果發(fā)現(xiàn)新版本,HHUpdateApp 會(huì)提示用戶進(jìn)行更新,并在用戶同意后自動(dòng)下載并解壓更新包,替換舊版文件。
另外,還支持靜默更新模式,允許更新過(guò)程在后臺(tái)進(jìn)行,不打擾用戶的正常使用。
項(xiàng)目說(shuō)明
下載Releases中最新安裝包,即刻體驗(yàn)全部功能,無(wú)需涉足各種腳本工具,只需面對(duì)你所需要升級(jí)的程序本身,讓?xiě)?yīng)用程序輕松獲得自動(dòng)升級(jí)的特性。
在上手前,有些名詞是需要我們了解的。
升級(jí)程序:HHUpdateApp.exe是一個(gè)可執(zhí)行程序,她提供了升級(jí)支持。下面文檔中的【升級(jí)程序】代指HHUpdateApp.
業(yè)務(wù)程序:是指你自己的程序,例如你有一個(gè)LOLClient.exe程序,我們稱它為業(yè)務(wù)程序.
HHUpdateApp.exe.config:升級(jí)程序的參數(shù)配置,里面包含【升級(jí)程序】工作時(shí)所需要的一些參數(shù),祥見(jiàn)開(kāi)發(fā)者使用
HHversions.json:升級(jí)版本信息文件,這個(gè)文件包含了【業(yè)務(wù)程序】的升級(jí)信息,它是json格式的文件,放置在遠(yuǎn)端電腦或服務(wù)器上,【升級(jí)程序】升級(jí)時(shí),會(huì)請(qǐng)求該文件,以獲得升級(jí)信息.
項(xiàng)目使用
升級(jí)程序原理
【升級(jí)程序】從您的服務(wù)器下載包含更新信息的JSON文件(HHversions.json)。它使用此JSON文件來(lái)獲取需要檢測(cè)更新的PC上【業(yè)務(wù)程序】有關(guān)最新版本的信息。
如果服務(wù)器上該【業(yè)務(wù)程序】的最新版本大于在用戶PC上的當(dāng)前版本,則HHUpdateApp將向用戶顯示更新對(duì)話框。
如果用戶按下更新按鈕來(lái)更新軟件,則它將從【HHversions.json)】文件中提供的URL下載更新文件(zip文件)。
之后執(zhí)行更新是安裝程序的工作,HHUpdateApp會(huì)將zip文件的內(nèi)容提取到應(yīng)用程序目錄中替換升級(jí)原應(yīng)用程序文件。
直接點(diǎn)擊【HHUpdateApp.exe】,只需要填寫(xiě)【業(yè)務(wù)應(yīng)用程序名稱】(例如LOLClient)即可體驗(yàn)的為你的LOLClient.exe應(yīng)用程序檢查更新。
開(kāi)發(fā)使用
1、配置HHUpdateApp.exe.config
配置升級(jí)程序,此處是HHUpdateApp.exe運(yùn)行是需要的一些參數(shù),可以手動(dòng)配置好。
如果沒(méi)有配置,更新程序運(yùn)行時(shí),會(huì)進(jìn)入配置頁(yè),要求配置。
兩種方式均可以。
<HHUpdateApp.Properties.Settings>
<!--業(yè)務(wù)應(yīng)用程序名稱:根據(jù)這個(gè)值,找到業(yè)務(wù)應(yīng)用程序,并為它賦予自動(dòng)更新的功能-->
<setting name="LaunchAppName" serializeAs="String">
<value />
</setting>
<!--服務(wù)地址:HHUpdateApp.exe將下載此處提供的HHversions.json文件(包含版本更新信息的JSON文件)-->
<setting name="ServerUpdateUrl" serializeAs="String">
<value>http://localhost:8020/HHversions.json</value>
</setting>
<!--非必要參數(shù),用于記錄忽略的一個(gè)版本號(hào):檢查更新時(shí)會(huì)忽略這個(gè)版本的更新-->
<setting name="LocalIgnoreVer" serializeAs="String">
<value />
</setting>
<!--非必要參數(shù),是否靜悄悄升級(jí):true,更新過(guò)程中不顯示界面;false,顯示更新界面-->
<setting name="SilentUpdate" serializeAs="String">
<value>False</value>
</setting>
</HHUpdateApp.Properties.Settings>
2、在【應(yīng)用程序】中添加代碼以使其對(duì)HHUpdateApp發(fā)起調(diào)用
添加調(diào)用檢測(cè)升級(jí)更新的方法,以WinForm程序?yàn)槔趹?yīng)用程序中添加{檢查更新}按鈕,該檢查更新按鈕,代碼如下
| 參數(shù) | 類型 | 說(shuō)明 |
|---|---|---|
| FileName | string | 【升級(jí)程序】HHUpdateApp.exe程序所在路徑 |
| Arguments | string[] | 參數(shù)數(shù)組:Arguments[0]:發(fā)起更新的應(yīng)用名稱(例如,LOLClient);Arguments[1]:檢查模式:0 表示定時(shí)檢查(自動(dòng)更新),1 表示手動(dòng)檢查 |
/// <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",//參數(shù):【升級(jí)程序】HHUpdateApp.exe程序所在路徑
Arguments = "LOLClient 1"http://參數(shù)1:【應(yīng)用程序】的名詞,例如:LOLClient;參數(shù)1:檢查更新模式
;
Process proc = Process.Start(processStartInfo);
if (proc != null)
{
proc.WaitForExit();
}
}
3、HHversions.json
發(fā)布版本信息HHversions.json。將HHversions.json文件放在【升級(jí)程序】可訪問(wèn)的服務(wù)器或遠(yuǎn)程電腦上。升級(jí)版本信息文件,這個(gè)文件包含了【業(yè)務(wù)程序】的升級(jí)信息,它有固定的格式,如下所示.注意:HHversions.json必須是UTF8格式
{
"ApplicationStart": "更新工作結(jié)束后啟動(dòng)的業(yè)務(wù)程序名,多個(gè)啟動(dòng)用 # 號(hào)分割",
"ReleaseDate": "發(fā)布時(shí)間",
"ReleaseUrl": "zip更新包發(fā)布地址",
"ReleaseVersion": "發(fā)布版本號(hào)",
"UpdateMode": "更新方式:Cover表示覆蓋原文件更新,NewInstall表示刪除源文件全新安裝",
"VersionDesc": "更新描述說(shuō)明",
"IgnoreFile": "更新過(guò)程中忽略的文件,多個(gè)文件用 # 號(hào)分割"
}
程序示例
更新彈窗






上面示例中使用的代碼片段
/// <summary>
/// 檢查更新按鈕
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
string _updateAppPath = textBox1.Text;//輸入升級(jí)程序所在目錄
if (File.Exists(_updateAppPath))//升級(jí)程序是否存在
{
ProcessStartInfo processStartInfo = new ProcessStartInfo()
{
FileName = _updateAppPath,//路徑
Arguments = "LOLClient 1"http://此需要升級(jí)的應(yīng)用程序名
};
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": "一個(gè)有趣的故事,當(dāng)我們最初準(zhǔn)備重做樂(lè)芙蘭時(shí)已經(jīng)準(zhǔn)備好了這個(gè)BUG的修復(fù),但最后并沒(méi)有實(shí)裝,因?yàn)檫@個(gè)技能被取代了。\r\n1,修復(fù)了一個(gè)BUG,【被動(dòng) - 鏡花水月】所召喚的分身在普攻命中前陣亡,那么她所進(jìn)行的普攻會(huì)造成傷害。\r\n2,新增:【惡意魔印】將為目標(biāo)施加一個(gè)印記。\r\n3,樂(lè)芙蘭重做后的大招理應(yīng)讓她能夠選擇復(fù)制哪個(gè)技能來(lái)做出更有趣的連招。",
"IgnoreFile": ""
}
項(xiàng)目源碼
只需從 Releases 頁(yè)面下載最新的安裝包,按照文檔中的指南完成基本配置即可。
Gitee:https://gitee.com/Chadwuo/HHAutoUpdate.NET
總結(jié)
HHUpdateApp 提供一種簡(jiǎn)便有效的解決方案,用于為傳統(tǒng)的桌面應(yīng)用程序添加自動(dòng)更新功能。它通過(guò)清晰的設(shè)計(jì)理念和強(qiáng)大的功能性,幫助開(kāi)發(fā)克服了更新管理上的挑戰(zhàn)。
不管是提高工作效率還是增強(qiáng)用戶體驗(yàn),HHUpdateApp 都展現(xiàn)出了其獨(dú)特價(jià)值。隨著未來(lái)更多特性的加入和技術(shù)優(yōu)化,我們有理由相信它將在桌面應(yīng)用開(kāi)發(fā)領(lǐng)域扮演更加重要的角色。
關(guān)鍵詞
HHUpdateApp、.NET、自動(dòng)更新、桌面應(yīng)用、JSON、用戶體驗(yàn)、開(kāi)源、C#、HTTP、ZIP
最后
如果你覺(jué)得這篇文章對(duì)你有幫助,不妨點(diǎn)個(gè)贊支持一下!你的支持是我繼續(xù)分享知識(shí)的動(dòng)力。如果有任何疑問(wèn)或需要進(jìn)一步的幫助,歡迎隨時(shí)留言。
也可以加入微信公眾號(hào)[DotNet技術(shù)匠] 社區(qū),與其他熱愛(ài)技術(shù)的同行一起交流心得,共同成長(zhǎng)!


浙公網(wǎng)安備 33010602011771號(hào)