# AutoBakService **Repository Path**: leliwang/auto-bak-service ## Basic Information - **Project Name**: AutoBakService - **Description**: 自动同步文件夹 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-09 - **Last Updated**: 2026-08-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AutoBakService `AutoBakService` 是一个基于 `.NET Framework 4.7.2` 的 Windows 服务,用于监听源目录变化,并将符合规则的文件同步到目标目录。 ## 功能概览 - 监听源目录及其子目录的文件变化 - 支持首次启动时全量同步 - 日常运行时以差量同步为主,监控异常时回退全量同步 - 支持按文件名关键字或正则规则筛选同步对象 - 支持源目录按保留数量清理旧文件 - 支持事件日志和文件日志双写 - 支持日志文件按天保留 ## 运行环境 - Windows - .NET Framework 4.7.2 - 需要管理员权限执行服务安装、卸载 ## 项目文件 - 入口程序:`Program.cs` - 服务核心逻辑:`AutoBakService.cs` - 日志实现:`AppLogger.cs` - 配置文件:`App.config` ## 配置说明 配置位于 `App.config` 的 `appSettings`。 ### 目录配置 ```xml ``` - `source_path`:源目录,必须已存在 - `target_path`:目标备份目录,不存在时会自动创建 ### 保留规则 ```xml ``` - `keep_file_count = 0` - 同步所有文件 - 不删除源目录中的任何文件 - `keep_file_count > 0` - 仅对命中匹配规则的文件执行同步和保留数量控制 - 保留逻辑按“每个目录”分别执行 - 按最后写入时间倒序保留最近 `N` 个文件 ### 文件名匹配规则 ```xml ``` - `file_name_pattern_mode = keyword` - 按关键字包含匹配 - 支持多个关键字,分隔符支持:`,` `;` `|` 空格 - 示例:`bak,temp,log` - `file_name_pattern_mode = regex` - 按正则表达式匹配 - 示例:`^(bak|temp|log).*\.zip$` - `file_name_keyword = *` - 表示匹配所有文件 ### 重试配置 ```xml ``` - `retry_delay`:失败后重试间隔,单位秒 - `max_retry_times`:最大重试次数 ### 日志配置 ```xml ``` - `log_dir`:日志目录 - `log_keep_days`:日志文件保留天数,仅保留最近 `N` 天 `.log` 文件 ## 同步行为 ### 正常同步 - 服务启动时执行一次全量同步 - 文件变化后执行差量同步 - `FileSystemWatcher` 异常时回退到全量同步 ### 删除行为 - 源文件删除时,目标对应文件也会删除 - 源子目录删除时,目标对应子目录也会删除 - 目标目录默认按镜像方式清理 ### 源目录为空时 - 目标根目录会保留 - 目标根目录中的文件和子目录会被清空 ### 重命名行为 - 源文件或目录重命名后 - 目标旧路径会删除 - 目标新路径会重新同步 ## 服务命令 程序支持交互运行和服务运行两种模式。 ### 交互命令 直接运行 EXE 可使用以下命令: ```powershell AutoBakService.exe install AutoBakService.exe uninstall AutoBakService.exe toggle AutoBakService.exe status ``` 说明: - `install`:安装并启动服务 - `uninstall`:停止并卸载服务 - `toggle`:已安装则卸载,未安装则安装并启动 - `status`:查看服务是否已安装 不带参数时,默认等价于: ```powershell AutoBakService.exe toggle ``` ## 日志说明 ### 事件日志 服务仍会写入 Windows `Application` 事件日志,事件源为: ```text AutoBackupService ``` ### 文件日志 - 日志文件输出到 `log_dir` - 按日期命名,例如:`2026-08-09.log` - 记录内容包括: - 服务启动成功/失败 - 文件监控异常 - 差量处理失败 - 全量同步失败 - 文件复制、删除、创建目录失败 - 交互命令失败 ## 常见问题 ### 1. 服务安装成功但启动失败 优先检查: - `source_path` 是否存在 - 当前账号是否对源目录和目标目录有权限 - `log_dir` 是否可写 然后查看: - Windows 事件日志 - `log_dir` 下当天的 `.log` 文件 ### 2. 为什么没有弹窗提醒 真正作为 Windows 服务启动时,进程运行在服务会话中,不适合依赖桌面弹窗。当前项目以: - 事件日志 - 文件日志 作为主要失败提醒方式。 ### 3. 为什么目标根目录没有被删除 当前设计是: - 保持目标内容与源目录镜像同步 - 但保留目标根目录本身 因此源目录清空后,`target_path` 会保留为空目录。 ## 构建 ```powershell dotnet build "AutoBakService.csproj" -c Debug ``` ## 发布部署 ### 生成发布包 执行以下脚本生成 `Release` 发布目录: ```powershell powershell -ExecutionPolicy Bypass -File ".\deploy\publish-release.ps1" ``` 默认输出目录: ```text artifacts\release\AutoBakService ``` 发布目录包含: - `AutoBakService.exe` - `AutoBakService.exe.config` - `README.md` - `LICENSE` - `logs\` - 安装/卸载/启停脚本 ### 部署步骤 1. 执行发布脚本生成发布包 2. 将 `artifacts\release\AutoBakService` 整个目录复制到目标机器 3. 按需修改目标目录中的 `AutoBakService.exe.config` 4. 确认 `source_path` 已存在,且当前账号有权限访问 5. 以管理员身份运行 `install-service.bat` ### 发布目录脚本 - `install-service.bat`:安装并启动服务 - `uninstall-service.bat`:停止并卸载服务 - `start-service.bat`:启动服务 - `stop-service.bat`:停止服务 - `status-service.bat`:查看服务状态 ### 升级部署建议 1. 以管理员身份运行 `stop-service.bat` 2. 替换发布目录中的程序文件 3. 保留原有配置文件和日志目录 4. 以管理员身份运行 `start-service.bat` ## 建议运维流程 1. 先配置 `App.config` 2. 确认 `source_path` 已存在 3. 以管理员身份运行: ```powershell AutoBakService.exe install ``` 4. 检查服务状态和日志输出