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

相关推荐
kim7 小时前
一个人 + AI,用 WinForms 搓了个 376KB 的 Windows 便签:便签 / 截图 / 标注 / OCR / 待办全塞进去了
c#
hez20108 小时前
一行代码在 .NET 项目里启用 Satori GC
c#·.net·.net core·gc·clr
宇卿.8 小时前
C#语句:
开发语言·c#
咕白m6258 小时前
使用 C# 将 TIFF 转换为 PDF
前端·c#
小蜗牛狂飙记9 小时前
Windows 双击 Jar 包无反应,不用写 bat 脚本!Jarfix 一键修复(以 Struts2 扫描工具为例)
windows·struts·jar
JQLvopkk9 小时前
HslCommunication,一个工具测遍所有 PLC
开发语言·人工智能·c#·交互
坐看风云变幻9 小时前
Betaflight 开发环境搭建保姆级教程(Ubuntu / Windows+WSL / Docker 三方案 + 官方网址大全)
windows·ubuntu·docker·无人机·飞控·betaflight
下页、再停留9 小时前
【C#桌面客户端系列学习-7】数据查询展示
开发语言·c#·visual studio
IT技术分享社区10 小时前
在 Windows 上跑未改动的 Linux 程序:微软 LiteBox v0.1 把这件事变简单了
linux·运维·windows·microsoft·开源
kakakahahahaha10 小时前
Win10/Win11 Windows Hello指纹不可用处理:WbioSrvc、传感器驱动与登录策略
windows·电脑·笔记本电脑·内容运营·软件需求