Windows Server SMB 共享文件 回收站

1. 项目简介

ShareRecycleBin 是一个专为 Windows Server (特别是 SMB 共享环境) 设计的增量回收站服务。它通过硬链接 (Hard Link) 技术实现对文件的"即时备份",并能在文件被删除时将其移动到指定的回收站目录,同时保留原始的目录结构和权限锁定。

2. 核心技术架构

项目采用解耦生产者-消费者模型,通过双优先级队列解决全量扫描与实时监控之间的 IO 冲突。

逻辑组件分工:

  • FileMonitor (实时监视器):捕捉文件系统的 Created, Deleted, Renamed 事件,享有高优先级。

  • FileScanner (全量扫描器):服务启动时扫描存量文件,享有低优先级,带 IO 冷却逻辑。

  • FileHandler (业务处理器):执行具体的 Win32 API 调用(硬链接创建、文件移动、ACL 修改)。

  • PathHelper (路径助手):处理 \?\ 长路径转换及相对路径计算。

3. 文件列表说明

文件名 类型 说明
App.config 配置文件 存储共享路径、影子库路径、回收站路径及扩展名白名单。
Program.cs 入口类 负责服务的注册、启动逻辑以及控制台调试模式切换。
RecycleBinService.cs 服务类 继承自 ServiceBase,协调监控、扫描与消费线程的生命周期。
WatcherTask.cs 模型类 定义 WatcherAction 枚举和 WatcherTask 任务对象。
FileMonitor.cs 逻辑类 封装 FileSystemWatcher,负责将实时事件压入高优先级队列。
FileScanner.cs 逻辑类 负责背景全量扫描,将任务压入低优先级队列。
FileHandler.cs 业务类 包含硬链接创建、文件移动及权限锁定等核心 IO 操作。
PathHelper.cs 工具类 静态方法库,处理长路径支持、白名单过滤及路径转换。

4. 关键配置项 (App.config)

cs 复制代码
 <appSettings>
    <add key="ShareRoot" value="D:\协同文件" />
    <add key="ShadowRoot" value="D:\.ShadowIndex" />
    <add key="RecycleRoot" value="D:\回收站" />
    <add key="WhiteList" value="dwg,dxf,doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,7z,jpg,png" />
    <add key="WatcherBufferSizeKB" value="64" />
    <add key="EnableCleanup" value="false"/>
    <add key="RecycleDays" value="30"/>
  </appSettings>

5. 开发与部署

编译环境

  • .NET Framework 4.7.2+ 或 .NET 6/8

  • Visual Studio 2022

  • NuGet 包:Serilog, Serilog.Sinks.File, Serilog.Sinks.Console

Git 常规操作流

如果您在开发过程中需要同步代码,请参考以下操作:

  1. 拉取最新代码:git pull origin master
  2. 查看修改状态:git status
  3. 提交修改:
复制代码
git add .
git commit -m "feat: 增加对硬链接创建失败的重试逻辑"

6. 注意事项

  1. 分区限制:ShadowRoot 必须与 ShareRoot 位于同一磁盘分区,否则 CreateHardLink 将失败。
  2. 性能优化:在处理超过 100 万个文件时,建议将 WatcherBufferSizeKB 调至 128。
  3. 权限:服务运行账户(如 LocalSystem)必须对源目录和目标目录拥有完整的读写及修改权限的权限(Full Control)。

7. 服务安装与启动指南

  1. 请以 管理员身份 运行 SMBRecycleBin.exe
  2. 使用 sc.exe 指令安装(推荐)
  • 安装服务

    复制代码
    # 注意:binPath= 后面有一个空格,路径建议使用双引号包裹
    sc.exe create SMBRecycleBin binPath= "C:\RecycleBinService\ShareRecycleBin.exe" start= auto displayname= "SMB共享回收站增强服务"
  • 启动服务

    复制代码
     sc.exe start SMBRecycleBin
  • 卸载服务

    复制代码
     sc.exe delete SMBRecycleBin
  • 停止服务

    复制代码
     sc.exe stop SMBRecycleBin

项目地址

https://github.com/CHMOSE023/ShareRecycleBin.git

相关推荐
tobebetter95275 小时前
WSL2 + Windows + remote Chrome CDP openclaw 浏览器自动化
chrome·windows·自动化
qq_454245035 小时前
GraphFoundation动态更新图
架构·c#·图论
愤豆6 小时前
07-Java语言核心-JVM原理-JVM对象模型详解
java·jvm·c#
桌面运维家6 小时前
解决Windows 10打印机脱机:端口、驱动、网络故障排除
windows·stm32·单片机
张人玉6 小时前
上位机项目笔记
笔记·c#·上位机
liwulin05066 小时前
【ROS2】【ESP32S3纯透传方案】ESP32S3+WINDOWS+VMware+ROS2+YDLIDA X导航完整落地方案
windows·stm32·单片机
AxureMost7 小时前
MTools 0.0.12-beta 全能工具箱
windows·开源软件
小杍随笔8 小时前
【Rust Exercism 练习详解:Anagram + Space Age + Sublist(附完整代码与深度解读)】
开发语言·rust·c#
呆子也有梦8 小时前
redis 的延时双删、双重检查锁定在游戏服务端的使用(伪代码为C#)
redis·后端·游戏·缓存·c#
beyond阿亮8 小时前
OpenClaw在Windows上接入飞书完整指南
人工智能·windows·ai·openclaw