# UpdateTool **Repository Path**: minibox/update-tool ## Basic Information - **Project Name**: UpdateTool - **Description**: 用来在局域网内部更新winform程序 以替代U盘复制粘贴 支持增量更新 无需nas 无需ftp 无需http文件服务器 无需配置防火墙 只用一个程序完成客户端 服务端 的基本功能 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2025-05-26 - **Last Updated**: 2025-05-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # UpdateTool 局域网程序简易增量更新工具 ## 一、概述 UpdateTool 是一款专门为局域网环境设计的文件更新工具,它包含测试、服务端和客户端三个主要部分。借助该工具,用户能够自动检测并更新文件,确保客户端使用的文件与服务端保持一致。此工具采用 C# 7.3 进行开发,为了兼容 Windows 7 操作系统,使用了 .NET 4.0 框架,有效解决了在局域网中为每台电脑更新文件时,需通过 U 盘复制粘贴替换文件的繁琐问题。 ## 二、功能特性 1. **自动更新**:客户端能够自动检测本地文件与服务端文件的差异,并依据检测结果自动更新文件,确保文件的实时性和一致性。 2. **文件校验**:运用 MD5 算法对文件进行严格校验,在文件传输和更新过程中,确保文件的完整性,防止文件损坏或被篡改。 3. **日志记录**:程序会将运行过程中的关键信息详细记录到日志文件中,方便开发人员和运维人员在后续排查问题时,能够快速定位并解决问题。 4. **测试功能**:提供了完善的测试功能,便于开发人员在开发和调试阶段进行功能验证和问题排查,提高开发效率。 5. **防火墙规则创建**:在服务端启动时,程序会自动为指定端口创建防火墙规则,确保网络连接的安全性和稳定性,避免因防火墙设置导致的连接问题。 6. **单文件服务器**:支持单文件服务器模式,允许局域网内的电脑通过浏览器下载指定文件,方便文件的分发和共享。 ## 三、使用方法 ### (一)配置文件 `Update.ini` 在运行程序之前,必须创建 `Update.ini` 配置文件,以下是文件内容示例及详细说明: ```ini 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 browser_download_listening_port = 8081 browser_download_file = base.zip ``` - `listening_port`:服务端监听的端口号,用于接收客户端的连接请求。 - `server_ip_port`:服务端的 IP 地址和端口号,客户端通过该地址与服务端进行通信。 - `business_app`:业务程序的名称,在更新文件时,程序会自动停止该业务程序,更新完成后再重新启动。 - `ignore_regexp`:需要忽略的文件或文件夹的正则表达式,多个表达式用分号分隔,可避免不必要的文件参与更新操作。 - `browser_download_listening_port`:单文件服务器监听的端口号,用于浏览器下载文件。 - `browser_download_file`:单文件服务器提供下载的文件路径。 ### (二)运行测试 将程序编译后,把生成的可执行文件命名为 `UpdateTool.exe`,运行该程序即可开启测试流程。在测试过程中,程序会自动创建服务端和客户端的测试目录,并将相关文件复制到测试目录中,随后启动服务端和业务程序,方便开发人员验证程序的功能。 ### (三)运行服务端 将程序编译后,把生成的可执行文件命名为 `UpdateServer.exe`,运行该程序即可启动更新服务器。服务器会读取配置文件,计算本地文件的 MD5 值,并启动 TCP 监听器,等待客户端的连接请求。 ### (四)运行客户端 将程序编译后,把生成的可执行文件命名为 `UpdateClient.exe`,运行该程序即可启动更新客户端。客户端会读取配置文件,从服务器获取文件列表,计算本地文件的 MD5 值,并对比服务器和本地的文件列表,若发现差异则自动进行文件更新操作。 ### (五)运行单文件服务器 将程序编译后,把生成的可执行文件命名为 `SingleFileServer.exe`,运行该程序即可启动单文件服务器。单文件服务器会监听指定端口,允许局域网内的电脑通过浏览器下载指定文件。 ## 四、代码结构 ### (一)主程序入口 `Main` 方法作为程序的入口,会根据当前可执行文件的名称调用不同的功能: - `UpdateTool.exe`:调用 `RunTest` 方法进行测试。 - `UpdateServer.exe`:调用 `RunServer` 方法启动更新服务器。 - `UpdateClient.exe`:调用 `RunClient` 方法启动更新客户端。 - `SingleFileServer.exe`:调用 `RunSingleFileServer` 方法启动单文件服务器。 - `Test.exe`:模拟业务程序,启动 `UpdateClient.exe`。 ### (二)日志记录 `Console_WriteLine` 和 `Console_Write` 方法用于将消息输出到控制台并记录到日志文件中,`LogToFile` 方法则负责将消息追加到日志文件 `UpdateTool.log` 中,方便后续查看和分析。 ### (三)测试功能 `RunTest` 方法模拟测试员的操作,创建测试目录,复制文件,启动服务端和业务程序,为开发和调试提供便利。 ### (四)服务端功能 `RunServer` 方法启动更新服务器,读取配置文件,计算本地文件的 MD5 值,启动 TCP 监听器,等待客户端连接。`HandleClient` 方法处理客户端连接,根据客户端的请求返回文件列表或文件内容。 ### (五)客户端功能 `RunClient` 方法启动更新客户端,读取配置文件,从服务器获取文件列表,计算本地文件的 MD5 值,对比文件列表,若有差异则进行更新。 ### (六)单文件服务器功能 `RunSingleFileServer` 方法启动单文件服务器,监听指定端口,处理浏览器的文件下载请求。 ### (七)辅助方法 - `GetNativeIPv4Address`:获取本地非回环 IPv4 地址,确保程序能够正确识别本地网络地址。 - `GetServerFileList`:从服务器获取文件列表,为客户端更新提供数据支持。 - `GenerateFileList`:生成指定目录下文件的 MD5 值列表,用于文件校验和对比。 - `ShouldIgnore`:判断文件是否需要忽略,避免不必要的文件参与更新操作。 - `CalculateMD5`:计算文件的 MD5 值,确保文件的完整性。 - `ReadConfig`:读取配置文件,获取程序运行所需的配置信息。 - `StopProcess`:停止指定名称的进程,在更新文件时确保业务程序的正常停止。 - `UpdateFiles`:更新本地文件,包括删除多余文件和下载新文件,确保本地文件与服务端一致。 - `ParseFileList`:解析文件列表字符串为字典,方便后续处理和对比。 - `DownloadFile`:从服务器下载指定文件,实现文件的更新操作。 - `GetRelativePath`:获取相对路径,方便文件的管理和操作。 - `AppendDirectorySeparatorChar`:在路径末尾添加目录分隔符,确保路径的正确性。 - `CreateFirewallRule`:为指定端口创建防火墙规则,确保网络连接的安全性。 ## 五、注意事项 1. 确保配置文件 `Update.ini` 存在且配置正确,特别是 `server_ip_port`、`listening_port` 等关键配置项,避免因配置错误导致程序无法正常运行。 2. 服务端和客户端需要在同一网络环境中,并且客户端可以访问服务端的 IP 地址和端口号,确保网络连接的畅通。 3. 程序运行过程中会生成日志文件 `UpdateTool.log`,可以查看该文件了解程序的运行情况,当出现问题时,可通过日志文件快速定位问题。 4. 在更新文件时,程序会停止业务程序,请确保业务程序可以正常停止和启动,避免数据丢失或业务中断。 5. 单文件服务器模式下,需手动将UpdateClient.exe和Update.ini及其他要带过去的文件压缩为一个压缩包, 确保 `browser_download_file` 指定的文件存在,并且路径正确,否则会导致文件下载失败。 6. 若防火墙规则创建失败,请手动检查防火墙设置,确保程序所需的端口开放,避免因防火墙限制导致的连接问题。