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