前言
在內(nèi)部開(kāi)發(fā)和部署 WinForm 應(yīng)用程序時(shí),如何高效地進(jìn)行程序更新一直是一個(gè)常見(jiàn)的痛點(diǎn)。傳統(tǒng)的更新方式往往依賴于 NAS、FTP 或 HTTP 文件服務(wù)器,不僅需要額外的硬件或軟件支持,還可能涉及復(fù)雜的網(wǎng)絡(luò)配置(如防火墻規(guī)則調(diào)整)。對(duì)于許多小型團(tuán)隊(duì)或局域網(wǎng)環(huán)境來(lái)說(shuō),這些要求無(wú)疑增加了部署和維護(hù)的復(fù)雜性。
今天推薦一款專為局域網(wǎng)設(shè)計(jì)的 WinForm 程序更新工具。該工具支持增量更新,大幅減少更新文件的大小和傳輸時(shí)間,同時(shí)無(wú)需任何額外的服務(wù)器或復(fù)雜的網(wǎng)絡(luò)配置。不管是客戶端還是服務(wù)端功能,都可以通過(guò)一個(gè)獨(dú)立的程序完成,真正實(shí)現(xiàn)了"零依賴"的更新體驗(yàn)。
項(xiàng)目介紹
UpdateTool是一款用于文件自動(dòng)更新的工具,包含測(cè)試、服務(wù)端和客戶端三個(gè)模塊。它能夠幫助用戶自動(dòng)檢測(cè)并更新文件,確保客戶端文件與服務(wù)端始終保持同步。
該工具使用 C# 7.3 開(kāi)發(fā),并基于.NET Framework 4.0 構(gòu)建,以兼容 Windows 7及更高版本操作系統(tǒng)。
傳統(tǒng)方式下,在局域網(wǎng)內(nèi)更新文件通常需要通過(guò)U盤(pán)逐臺(tái)電腦進(jìn)行復(fù)制粘貼替換,過(guò)程繁瑣且耗時(shí)。而 UpdateTool解決了這一問(wèn)題,實(shí)現(xiàn)了局域網(wǎng)內(nèi)文件的自動(dòng)化更新,極大地簡(jiǎn)化了維護(hù)流程,提高了工作效率。
使用 UpdateTool,大家可以輕松管理和分發(fā)文件更新,無(wú)需復(fù)雜的操作或額外硬件支持,讓文件管理變得更加簡(jiǎn)單高效。
項(xiàng)目特點(diǎn)
1、自動(dòng)更新
客戶端能夠自動(dòng)檢測(cè)本地文件與服務(wù)端文件之間的差異,并智能執(zhí)行更新操作,確保所有文件始終保持最新版本。
2、文件校驗(yàn)
采用 MD5 算法對(duì)文件進(jìn)行校驗(yàn),確保傳輸和更新過(guò)程中的文件完整性,防止數(shù)據(jù)損壞或丟失。
3、日志記錄
詳細(xì)記錄程序運(yùn)行過(guò)程中的關(guān)鍵信息至日志文件,便于后續(xù)問(wèn)題排查和維護(hù)工作。
4、測(cè)試功能
內(nèi)置測(cè)試模塊,方便開(kāi)發(fā)人員在開(kāi)發(fā)和調(diào)試階段快速驗(yàn)證功能,提升工作效率。
項(xiàng)目使用
1、配置文件 Update.ini
在運(yùn)行程序前,需要?jiǎng)?chuàng)建一個(gè)名為 Update.ini
的配置文件。
以下是文件內(nèi)容的示例及參數(shù)說(shuō)明:
business_app=Test.exe
server_ip_port=192.168.43.126:8888
listening_port=8888
ignore_regexp=\.pdb$;RobotList.txt$;UpdateServer.exe$;UpdateClient.exe;UpdateTool.exe$;app.publish\\;UpdateTool.log
business_app:指定業(yè)務(wù)程序的名稱(如 Test.exe
)。
server_ip_port:服務(wù)端的 IP 地址和端口號(hào)(如 192.168.43.126:8888
)。
listening_port:服務(wù)端監(jiān)聽(tīng)的端口號(hào)(如 8888
)。
ignore_regexp:需要忽略的文件或文件夾的正則表達(dá)式,多個(gè)表達(dá)式用分號(hào)分隔(如忽略 .pdb
文件、日志文件等)。
2、運(yùn)行測(cè)試
編譯程序后,將生成的可執(zhí)行文件命名為 UpdateTool.exe
。
運(yùn)行該程序即可啟動(dòng)測(cè)試模式。
測(cè)試過(guò)程中:
程序會(huì)自動(dòng)創(chuàng)建服務(wù)端和客戶端的測(cè)試目錄。
將相關(guān)文件復(fù)制到測(cè)試目錄中,并啟動(dòng)服務(wù)端和業(yè)務(wù)程序以模擬更新流程。
3、運(yùn)行服務(wù)端
編譯程序后,將生成的可執(zhí)行文件命名為 UpdateServer.exe
。
運(yùn)行該程序即可啟動(dòng)更新服務(wù)器:
服務(wù)器會(huì)讀取 Update.ini
配置文件。
計(jì)算本地文件的 MD5 值并建立文件列表。
啟動(dòng)監(jiān)聽(tīng),等待客戶端連接。
4、運(yùn)行客戶端
編譯程序后,將生成的可執(zhí)行文件命名為 UpdateClient.exe
。
運(yùn)行該程序即可啟動(dòng)更新客戶端:
客戶端會(huì)讀取 Update.ini
配置文件。
從服務(wù)器獲取文件列表,并計(jì)算本地文件的 MD5 值。
對(duì)比服務(wù)器與本地文件列表,若發(fā)現(xiàn)差異,則自動(dòng)下載并更新文件。
項(xiàng)目框架
1、主程序入口
Main
方法是程序的入口點(diǎn),根據(jù)當(dāng)前可執(zhí)行文件的名稱動(dòng)態(tài)調(diào)用不同的功能模塊:
UpdateTool.exe:調(diào)用 RunTest
方法,用于測(cè)試環(huán)境的模擬。
UpdateServer.exe:調(diào)用 RunServer
方法,啟動(dòng)更新服務(wù)器。
UpdateClient.exe:調(diào)用 RunClient
方法,啟動(dòng)更新客戶端。
Test.exe:模擬業(yè)務(wù)程序,自動(dòng)啟動(dòng) UpdateClient.exe
。
2、日志記錄
提供日志記錄和控制臺(tái)輸出功能:
Console_WriteLine 和 Console_Write:將消息同時(shí)輸出到控制臺(tái)并記錄到日志文件中。
LogToFile:將日志信息追加寫(xiě)入日志文件,便于后續(xù)問(wèn)題排查。
3、測(cè)試功能
RunTest
方法用于模擬測(cè)試流程:
創(chuàng)建服務(wù)端和客戶端的測(cè)試目錄,并復(fù)制相關(guān)文件。
啟動(dòng)服務(wù)端和業(yè)務(wù)程序,驗(yàn)證更新功能是否正常。
4、服務(wù)端功能
RunServer
方法負(fù)責(zé)啟動(dòng)更新服務(wù)器:
讀取配置文件,計(jì)算本地文件的 MD5 值并生成文件列表。
啟動(dòng) TCP 監(jiān)聽(tīng)器,等待客戶端連接。
HandleClient 方法處理客戶端請(qǐng)求,返回文件列表或文件內(nèi)容。
5、客戶端功能
RunClient
方法實(shí)現(xiàn)客戶端的核心邏輯:
讀取配置文件,從服務(wù)端獲取文件列表。
計(jì)算本地文件的 MD5 值并與服務(wù)端文件列表進(jìn)行對(duì)比。
若發(fā)現(xiàn)差異,自動(dòng)下載新文件或刪除多余文件,完成更新。
6、輔助方法
提供一系列工具方法,支持核心功能的實(shí)現(xiàn):
GetNativeIPv4Address:獲取本機(jī)非回環(huán)的 IPv4 地址。
GetServerFileList:從服務(wù)端獲取文件列表。
GenerateFileList:生成指定目錄下所有文件的 MD5 值列表。
ShouldIgnore:根據(jù)正則表達(dá)式判斷文件是否需要忽略。
CalculateMD5:計(jì)算文件的 MD5 值,確保文件完整性。
ReadConfig:解析配置文件,提取運(yùn)行參數(shù)。
StopProcess:停止指定名稱的進(jìn)程。
UpdateFiles:更新本地文件,包括刪除多余文件和下載新文件。
ParseFileList:將文件列表字符串解析為字典格式。
DownloadFile:從服務(wù)端下載指定文件。
GetRelativePath:獲取文件的相對(duì)路徑。
AppendDirectorySeparatorChar:在路徑末尾添加目錄分隔符,確保路徑正確性。
注意事項(xiàng)
1、配置文件要求
確保 Update.ini
配置文件存在且內(nèi)容正確。錯(cuò)誤的配置可能導(dǎo)致程序無(wú)法正常運(yùn)行。
2、網(wǎng)絡(luò)環(huán)境要求
服務(wù)端和客戶端需處于同一網(wǎng)絡(luò)環(huán)境中,且客戶端能夠正常訪問(wèn)服務(wù)端的 IP 地址和端口號(hào)。請(qǐng)確保網(wǎng)絡(luò)連接暢通,避免因防火墻或網(wǎng)絡(luò)限制導(dǎo)致通信失敗。
3、日志文件查看
程序運(yùn)行過(guò)程中會(huì)生成日志文件 UpdateTool.log
,記錄關(guān)鍵操作和運(yùn)行狀態(tài)。如遇問(wèn)題,可通過(guò)查看日志文件快速定位原因。
4、業(yè)務(wù)程序管理
在更新文件時(shí),程序會(huì)自動(dòng)停止業(yè)務(wù)程序(如 Test.exe
)。請(qǐng)確保業(yè)務(wù)程序支持正常的停止和啟動(dòng)操作,以避免更新過(guò)程中出現(xiàn)異常。
項(xiàng)目源碼
Gitee:https://gitee.com/spdf00/update-tool?
總結(jié)
以上僅展示了UpdateTool 局域網(wǎng)程序簡(jiǎn)易增量更新工具的部分功能。更多實(shí)用特性和詳細(xì)信息,請(qǐng)大家訪問(wèn)項(xiàng)目源碼。
希望通過(guò)本文能為 WinForm 應(yīng)用程序自動(dòng)更新開(kāi)發(fā)方面提供有價(jià)值的參考。
閱讀原文:原文鏈接
該文章在 2025/5/9 9:48:17 編輯過(guò)