C:\Windows\System32\cleanmgr.exe 传统磁盘清理工具;独立 EXE 可执行程序。 核心定位:基于VolumeCaches注册表扩展模型,扫描各类系统缓存垃圾;支持 Sagerun 自动化配置; cleanmgr.exe 和 Win11 设置页「存储‑临时文件」(storusage.dll+storagesense.dll)完全独立的栈,规则库隔离,互不调用
Windows11「设置‑系统‑存储‑临时文件」深度拆解
区分:UI 为
SystemSettings.exe,实际业务逻辑由 StorageSense(存储感知)组件实现,和传统cleanmgr.exe磁盘清理为两套组件,清理集合不完全等价。
一、底层原理
整体架构:UI‑后台分离,白名单路径 + 文件元数据过滤模型
- 设置页面仅做:磁盘占用扫描统计、分类展示、用户勾选选项;本身不执行删除操作;用户点击「删除文件」,将勾选策略下发给 storagesense.dll 执行器。
- 核心规则:基于系统内置白名单路径清单,扫描预定义目录;结合文件属性(
FILE_ATTRIBUTE_TEMPORARY)、文件占用锁状态、文件修改时间做过滤判断。 - 文件过滤逻辑:
- 跳过被进程占用锁定的文件(不杀进程、不强制解锁,直接跳过)
- 跳过系统受保护路径、权限拒绝访问的目录
- 用户勾选分类才执行对应删除;部分类别文件直接永久删除,不进入回收站博客园。
- 两大运行模式
- 手动模式:用户在临时文件页面勾选,点击删除,同步触发一次清理任务。
- 自动模式(存储感知):计划任务触发,读取注册表策略,后台静默执行清理博客园。
本质属于事后清理机制:只删除已经生成好的临时文件,无法拦截应用程序产生新临时文件。
二、依赖文件
| 组件 | 文件名 | 作用 |
|---|---|---|
| 设置 UI | SystemSettings.exe |
设置‑系统‑存储图形界面;做扫描展示、接收用户勾选,不负责删除逻辑博客园。 |
| 核心业务库 | storagesense.dll |
存储感知核心实现:目录遍历、规则过滤、文件删除、统计更新、日志输出博客园。 |
| 传统兼容工具 | cleanmgr.exe |
旧版磁盘清理;VolumeCaches 注册表定义清理项;与存储感知是两套独立组件,清理项集合不完全重合。 |
| 计划任务载体 | 任务:\Microsoft\Windows\StorageSense\StorageSenseTask |
存储感知后台调度触发器,实现定时 / 磁盘低空间条件唤醒后台任务博客园。 |
三、依赖关系
3.1 注册表依赖
- 用户配置:
HKCU\Software\Microsoft\Windows\CurrentVersion\StorageSense
存储开关、自动清理周期、各类清理项启用状态、文件保留天数;组策略可覆盖该配置博客园。
- 机器全局策略:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense - cleanmgr 独立规则库:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches
⚠️StorageSense 不读取 VolumeCaches;该注册表仅给旧版 cleanmgr 使用,二者规则库隔离。
3.2 环境变量依赖
%TEMP%、%TMP%用户临时目录;%SystemRoot%\Temp系统临时目录;
如果环境变量被篡改指向无效路径,扫描统计异常,清理失效。
3.3 系统服务依赖
- 依赖文件系统 API、NTFS 权限子系统;
- 扫描旧版 Windows 安装
Windows.old依赖 Windows 更新相关组件; - 不依赖第三方服务;第三方杀毒 / EDR 可以拦截文件删除行为,造成 “显示可清理,删除后空间不变”。
3.4 依赖数据来源(扫描的典型白名单路径)
- 用户临时:
%LOCALAPPDATA%\Temp - 系统临时:
C:\Windows\Temp - Windows 更新缓存、交付优化文件、DirectX 着色器缓存、缩略图缓存、系统错误转储、日志目录、
Windows.old旧系统目录、下载文件夹(可选)、回收站(可选)。
重要:第三方软件私有缓存目录不在白名单,不会被扫描清理。
四、逻辑链路
4.1 手动清理完整链路(设置‑临时文件页面点击删除)
用户打开设置 → SystemSettings.exe调用存储统计接口
→ 扫描预定义白名单目录,统计每一类可清理文件大小,展示UI
→ 用户勾选清理类别,点击【删除文件】
→ UI把勾选参数下发 storagesense.dll
→ storagesense.dll加载规则
→ 遍历白名单目录 → 过滤:保护文件/被占用文件/权限不足路径
→ 对匹配项执行删除;部分文件永久删除,部分走回收站逻辑
→ 记录执行日志;刷新磁盘占用缓存;返回执行结果给设置UI
被占用文件直接跳过,不终止进程,现象:清理完再次刷新,又看到同样临时文件。
4.2 自动流水线(存储感知后台自动执行)
触发条件:磁盘空间不足 / 定时周期 → 任务计划程序唤醒StorageSenseTask任务
→ 读取HKCU注册表的用户策略配置
→ storagesense.dll执行扫描‑过滤‑删除逻辑
→ 输出日志;更新存储统计;无弹窗UI,后台静默运行
五、配套链
- 上层 UI 配套:
SystemSettings.exe(设置);与存储感知 COM 接口交互。 - 调度配套:任务计划程序(Task Scheduler)实现自动触发。
- 统计配套:系统存储统计组件,用于展示各类磁盘占用。
- 日志配套:事件查看器 → Applications and Services Logs → Microsoft‑Windows‑StorageSense,可排查跳过文件、执行失败原因。
- 互补配套工具
cleanmgr.exe传统磁盘清理:VolumeCaches 规则库,部分系统深度清理项(WinSxS 组件清理)仅 cleanmgr 具备;- DISM:用于组件存储清理,不属于临时文件清理;
- 组策略配套:可域环境批量管控存储感知开关、清理策略。
六、边界(约束、坑点、失效边界)
6.1 扫描范围边界
- 只扫描系统内置白名单路径;第三方应用私有缓存目录不会扫描清理;软件自己的缓存需要软件内部清除博客园。
- 默认仅处理系统盘 C 盘;其他数据盘不会执行临时文件自动清理。
- 不扫描、不触碰用户文档、桌面等业务数据目录。
6.2 文件删除边界
- 被进程锁定占用的临时文件直接跳过,不会强制杀进程删除;表现为清理完刷新又出现相同条目。
- 部分类别文件为直接永久删除,不进回收站;下载文件夹、回收站属于可勾选高危项,勾选后会真实删除用户资料。
Windows.old旧系统安装包删除之后,丧失回退上一版 Windows 能力。- 权限边界:普通用户权限无法访问部分系统受保护目录,该类目录内容直接跳过;需要管理员权限才能完整清理全部系统临时目录。
6.3 功能边界(与 cleanmgr 关键区别)
- StorageSense(设置临时文件)不读取
VolumeCaches注册表,两套规则相互独立,可清理项目不完全对等。 - 存储感知不能做 WinSxS 组件深度清理;该能力属于 cleanmgr / DISM。
- UI 页面仅统计,UI 损坏不代表后台清理组件损坏;现象:页面能看到大小,点删除无效果。
6.4 业务逻辑边界
- 仅事后清理;不能阻止程序生成新临时文件,应用疯狂写临时文件会很快再次占满磁盘。
- 多用户隔离:存储感知策略按每个用户配置;A 用户的存储感知配置不会影响 B 用户;系统级临时目录会被所有用户扫描。
6.5 外部干扰边界
EDR / 杀毒软件的文件防护、文件过滤驱动拦截删除操作;出现统计显示有大量可清理空间,但删除后磁盘空间几乎不释放。
七、自动化
7.1 调用存储感知 COM 接口触发手动执行(PowerShell)
# 直接触发一次存储感知执行(等同于UI点立即运行)
Invoke‑CimMethod -Namespace Root\Microsoft\Windows\StorageSense -ClassName StorageSense -MethodName RunStorageSense
7.2 通过计划任务触发
schtasks /run /tn "\Microsoft\Windows\StorageSense\StorageSenseTask"
注意:该任务以当前登录用户上下文运行,非系统账户。
7.3 传统 cleanmgr 自动化(两套不同组件,用于对比)
::预配置方案编号1,执行静默清理
cleanmgr /sagerun:1
7.4 排查:读取存储感知事件日志
Get‑WinEvent -LogName Microsoft‑Windows‑StorageSense/Operational | Select‑Object TimeCreated,Id,Message | Sort‑Object TimeCreated -Descending
7.5 组策略批量管控
路径:计算机配置 / 用户配置 → 管理模板 → 系统 → 存储感知;可批量开关、配置自动清理周期。
运维提示:企业环境,不要把存储感知自动清理下载文件夹开启,存在误删除业务资料风险。
八、关键现象速查
- 清理完又看到一堆临时文件:大概率文件被进程占用,storagesense 直接跳过。
- UI 显示大量可清理,删除后空间几乎不变:EDR 拦截;或大量文件处于占用状态。
- 某些缓存类别不在设置页面出现:属于第三方私有缓存,不在系统白名单。
storagesense.dll 深度解构分析
文件路径:
C:\Windows\System32\storagesense.dll;Windows10 1709 + 引入,Windows11 核心组件;COM 进程内组件(In‑Proc Server),无独立 exe,被宿主进程加载执行;实现存储感知 StorageSense 全部扫描、策略过滤、文件删除、统计、日志逻辑;设置‑系统‑存储‑临时文件后台执行引擎。
一、底层原理
- 组件模型:COM In‑Proc DLL 无独立可执行程序,由不同宿主进程加载:
- UI 路径:
SystemSettings.exe(设置)加载,响应用户手动点击 “删除文件”; - 定时后台路径:任务计划程序
StorageSenseTask宿主加载 DLL,后台自动执行清理。
不是 Windows 系统服务(无 SVC 服务注册),靠任务计划调度用户上下文执行。
- 内部三大核心引擎
- 策略解析引擎:读取注册表用户 / 机器策略;解析清理白名单路径集合、保留天数阈值、启用 / 禁用项;
- 文件扫描过滤引擎:遍历预定义目录;判断文件属性
FILE_ATTRIBUTE_TEMPORARY、文件占用状态、最后访问 / 修改时间、ACL 访问权限;遇到被占用文件直接跳过,不终止进程、不强制解锁; - 文件操作执行引擎:调用 Win32 API
DeleteFileW;区分 “永久删除”、移入回收站;更新磁盘占用统计;输出 ETW 事件日志。
- 设计范式:白名单驱动、保守安全优先
- 只扫描系统内置固定白名单目录;不会全盘扫描磁盘;第三方软件缓存目录不在内置白名单内;
- 多道保护:跳过受保护系统目录、权限拒绝目录、锁定占用文件;
- 用户上下文运行:以当前登录用户权限执行,非 SYSTEM 权限;只能访问该用户可访问路径;系统级目录部分操作需要管理员权限;
- 和传统
cleanmgr.exe完全隔离:不读取 VolumeCaches 注册表项,两套独立规则库,清理集合不互通Microsoft ...。
本质:事后清理组件;只删除已生成垃圾文件;不能拦截程序生成临时文件。
二、依赖文件
| 文件 | 角色说明 |
|---|---|
storagesense.dll |
主 COM 组件本体,核心业务逻辑 |
SettingsHandlers_StorageSense.dll |
设置 UI 层处理适配器,SystemSettings.exe 调用的 UI 桥接层 |
ext‑ms‑win‑storage‑sense‑l1‑2‑0.dll |
StorageSense Win32 API 集,上层调用入口抽象层 |
kernel32.dll / advapi32.dll |
文件系统 API、注册表读取、权限、时间 API |
ole32.dll |
COM 组件加载、对象实例化基础库 |
storusage.dll |
磁盘占用统计、存储用量上报组件 |
taskschd.dll |
任务计划程序调度(后台自动模式) |
不依赖:
cleanmgr.exe;不依赖任何第三方服务。
三、依赖关系
3.1 COM 注册依赖(注册表 CLSID)
HKCR\CLSID\{StorageSense COM‑CLSID}\InprocServer32 指向storagesense.dll,线程模型Apartment;COM 注册损坏,表现为任务计划执行报错 “类未注册 0x80040154”。
3.2 策略注册表依赖
- 用户策略(每个用户独立,最重要)
HKCU\Software\Microsoft\Windows\CurrentVersion\StorageSense
存储:开关状态、各类清理项启用标记、文件保留天数阈值、OneDrive 本地文件脱机策略;按用户隔离,A 用户配置不影响 B 用户。
- 机器全局策略(组策略覆盖源)
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense
组策略模板会改写该分支,强制覆盖用户配置。
⚠️ 不读取 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches(该键仅供 cleanmgr 使用)。
3.3 环境变量依赖
依赖系统环境变量:%TEMP%、%TMP%、%SystemRoot%;环境变量篡改指向无效路径,会造成扫描统计异常、清理失效。
3.4 宿主进程依赖
- 手动模式宿主:
SystemSettings.exe; - 自动后台模式宿主:任务计划项
\Microsoft\Windows\StorageSense\StorageSenseTask;在当前登录用户安全上下文运行,不是 SYSTEM 账户;未登录用户会话,任务不会执行Microsoft ...。
3.5 文件系统与外部干扰依赖
- 依赖 NTFS 文件 API;依赖读取文件元数据(修改时间、属性);
- EDR / 杀毒微过滤驱动可以拦截
DeleteFileW调用;现象:UI 显示可释放空间,执行后磁盘空间几乎不变。
3.6 日志输出依赖
ETW 日志通道:Microsoft‑Windows‑StorageSense/Operational;记录扫描条目、跳过原因、删除成功 / 失败、错误码;排错核心数据源。
四、逻辑链路(两套执行链路)
链路 A|手动触发(设置 UI 点击删除文件)
SystemSettings.exe (设置UI)
→加载 SettingsHandlers_StorageSense.dll
→COM实例化 storagesense.dll 对象
→storagesense.dll:加载HKCU用户策略 + 内置白名单
→执行目录扫描;统计每一类文件大小,回传给UI展示
[用户勾选清理项,点击删除文件]
→传入勾选的分类掩码参数给storagesense.dll
→策略过滤引擎筛选待删除文件集合
→遍历文件:判断占用锁、权限、时间条件
→Win32 DeleteFile / SHFileOperation(回收站逻辑)执行删除
→写ETW事件日志;更新存储统计
→返回执行结果给SystemSettings.exe刷新UI
链路 B|自动后台流水线(存储感知定时 / 低磁盘触发)
任务计划程序触发 StorageSenseTask
→当前登录用户上下文,加载 storagesense.dll COM对象
→读取HKCU注册表完整自动策略(保留天数、触发阈值)
→读取磁盘空闲百分比,判断是否满足触发条件
→扫描白名单目录,应用时间阈值过滤(如回收站超过30天)
→执行删除;OneDrive文件执行“转为仅联机”,不物理删除
→输出ETW日志;无GUI弹窗,后台静默执行
关键分支判断逻辑在 DLL 内部: if 文件被进程占用 → 直接跳过,不处理 if 访问被 ACL 拒绝 → 跳过 if 命中系统保护路径 → 跳过
五、配套链
- 上层 UI 配套
SystemSettings.exe+SettingsHandlers_StorageSense.dll:仅做展示与参数下发,本身不实现任何删除逻辑。 - 调度配套 Task Scheduler 任务:
\Microsoft\Windows\StorageSense\StorageSenseTask;提供定时、磁盘低水位触发唤醒能力。 - 统计配套
storusage.dll:磁盘占用统计组件,为 UI 提供占用大小数据。 - 日志排错配套 事件日志:
Microsoft‑Windows‑StorageSense/Operational;记录跳过原因(文件锁定、拒绝访问等)。 - 组策略配套 组策略模板:计算机配置 / 用户配置‑管理模板‑系统‑存储感知;可批量强制开关、强制清理策略。
- 互补配套(区分,非本 DLL 组件)
cleanmgr.exe:旧版磁盘清理,VolumeCaches 规则库;可做 WinSxS 深度清理;storagesense.dll 不调用它;- DISM:组件存储清理,完全独立组件。
六、边界(约束、坑、失效边界)
6.1 权限边界
- DLL 运行于当前登录用户权限上下文,不是 SYSTEM;只能访问该用户有权限的目录;系统目录部分文件因权限不足直接跳过;
- 多用户系统:每个用户拥有独立 HKCU 策略;storagesense.dll 执行时只处理当前用户的临时目录;不会扫描其他用户配置目录。
6.2 磁盘边界
- 仅处理系统盘 C 盘;不会自动扫描 D/E 等数据盘;其他盘临时文件不会被 storagesense.dll 清理Microsoft ...。
6.3 文件处理边界
- 不杀进程,被占用 / 锁定文件直接跳过;现象:清理完成刷新页面,临时文件再次出现;
- 部分类别永久删除,不进回收站;回收站 / 下载文件夹为可选开启项;企业环境严禁默认开启下载文件夹清理,存在业务资料误删风险;
- 白名单限制:第三方软件私有缓存目录不在内置白名单,完全不扫描;无法清理浏览器第三方缓存、软件私有 cache。
6.4 与 cleanmgr 边界
storagesense.dll 完全不读取 VolumeCaches;部分旧版系统清理项(WinSxS 深度组件清理)不在 storagesense 能力范围,只能由 cleanmgr / DISM 完成。
6.5 COM 组件故障边界
- CLSID 注册表损坏:任务计划运行报
0x80040154 Class not registered;手动 UI 路径也异常; - 文件损坏:SFC 可修复
sfc /scanfile=c:\windows\system32\storagesense.dll。
6.6 触发运行边界
后台任务必须存在已登录交互式用户会话;无用户登录(服务器控制台 0 会话),StorageSenseTask 任务不会有效执行Microsoft ...。
6.7 外部干扰边界
EDR、杀毒过滤驱动拦截 DeleteFile 调用,出现 “统计显示大量可清理,实际空间不释放”。
七、自动化调用与排错脚本
7.1 WMI/CIM 触发 storagesense.dll 执行(等同于 UI 点立即运行)
Invoke‑CimMethod -Namespace Root\Microsoft\Windows\StorageSense -ClassName StorageSense -MethodName RunStorageSense
底层:CIM 接口内部 COM 调用加载 storagesense.dll 执行清理逻辑。
7.2 读取存储感知事件日志(排查跳过、失败原因)
Get‑WinEvent -LogName Microsoft‑Windows‑StorageSense/Operational | Sort‑Object TimeCreated -Descending | Select‑Object TimeCreated,Id,Message | ft
7.3 任务计划手动触发后台任务
schtasks /run /tn "\Microsoft\Windows\StorageSense\StorageSenseTask"
7.4 组件修复
sfc /scanfile=C:\Windows\System32\storagesense.dll
八、Mermaid 简要时序(storagesense.dll 手动调用链路)
sequenceDiagram
participant UI as SystemSettings.exe
participant Adapter as SettingsHandlers_StorageSense.dll
participant DLL as storagesense.dll
participant Reg as Registry(HKCU StorageSense)
participant FS as Win32 FileAPI
participant ETW as EventLog
UI->>Adapter: 请求临时文件统计
Adapter->>DLL: COM CoCreateInstance()
DLL->>Reg: 读取用户策略+白名单路径
DLL->>FS: 遍历目录,扫描统计
DLL-->>Adapter: 返回各分类占用大小
Adapter-->>UI: UI渲染页面展示
UI->>Adapter: 用户点击【删除文件】,传入勾选掩码
Adapter->>DLL: 执行清理,传入选择掩码
DLL->>FS: 遍历文件;判断锁定/权限/时间
loop 每个文件
alt 文件被占用 / 无访问权限
DLL->>ETW: 记录【跳过】事件
else
DLL->>FS: DeleteFileW / 移入回收站
DLL->>ETW: 记录删除成功事件
end
end
DLL-->>Adapter: 返回执行结果
Adapter-->>UI: 刷新存储页面
storusage.dll 深度解构分析
文件路径:
C:\Windows\System32\storusage.dllWindows 10 1709 + 引入,Windows11 系统存储用量统计核心组件;COM 进程内 In‑Proc 组件,无独立 exe。 核心定位:为「设置‑系统‑存储」页面提供磁盘空间分类扫描、占用量计算;为 storagesense.dll 存储感知提供磁盘空闲 / 已用空间读数。 职责:只做扫描统计,不做文件删除,不执行清理动作;清理逻辑由storagesense.dll完成,二者分工严格隔离。
一、底层原理
- COM In‑Proc 进程内组件模型 无独立可执行程序,被多个宿主进程加载:
SystemSettings.exe(设置应用):UI 页面加载,生成存储概览、各类别占用大小(系统、应用、文档、临时文件、图片、视频等)。storagesense.dll:存储感知内部调用,读取磁盘空闲阈值,判断是否触发自动清理。- 部分系统诊断组件也会加载该 DLL 获取磁盘分类数据。
- 内部三大核心引擎
- 路径扫描引擎:基于系统内置分类规则库,遍历预定义目录;按文件归属打上分类标签(应用、系统、临时、文档、媒体、其他);不是全盘暴力扫描,采用规则白名单 + 已知目录映射。
- 用量聚合引擎:遍历文件,累加文件大小;处理硬链接、重复数据流、NTFS 稀疏文件、目录 junction 连接点,避免重复重复统计;处理 ACL 访问拒绝,跳过无权限访问子目录。
- 缓存管理引擎:扫描结果做内存 + 注册表缓存,避免每次打开设置都全量重扫磁盘;当文件大量增删后缓存会过期,触发重新扫描。
- 关键设计范式
- 只读统计组件,无写文件、删除文件逻辑,风险面小;
- 用户上下文执行:以调用方进程权限执行;普通用户拿不到系统受保护目录完整统计,部分目录标记为 “其他”;
- 区分逻辑:
storusage.dll:算空间,做分类;storagesense.dll:读统计结果 + 策略,执行文件删除清理;
- 和传统磁盘清理
cleanmgr.exe完全独立,不共用规则。
典型现象:打开设置‑存储会卡顿几秒,就是
storusage.dll正在执行磁盘扫描计算。
二、依赖文件
| 文件 | 作用说明 |
|---|---|
storusage.dll |
本体 COM 组件,扫描、分类、用量计算核心 |
SettingsHandlers_Storage.dll |
设置 UI 适配器桥接,SystemSettings.exe 调用入口 |
ole32.dll |
COM 对象实例化、线程模型管理 |
kernel32.dll |
Win32 文件 API、目录遍历、文件大小获取、时间、稀疏文件处理 |
advapi32.dll |
ACL 权限查询,判断目录是否可访问 |
ntdll.dll |
底层 NTFS 文件信息获取 |
storagesense.dll |
消费方;读取 storusage 输出的磁盘空闲空间数值,用于自动清理触发判断 |
不依赖:cleanmgr.exe;不直接操作文件删除。
三、依赖关系
3.1 COM 注册表依赖
HKCR\CLSID\{StorUsage COM‑CLSID}\InprocServer32 指向storusage.dll,线程模型Apartment。 COM 注册损坏:设置的存储页面显示空白、一直转圈加载、无法展示磁盘占用数据,报错0x80040154类未注册。
3.2 缓存注册表依赖
HKCU\Software\Microsoft\Windows\CurrentVersion\StorageUsage
存放扫描时间戳、各分类缓存大小;用来避免频繁全盘扫描;缓存过期条件:时间超时、检测磁盘文件系统发生重大变更。 可删除该分支,强制下次打开存储页面全量重新扫描。
3.3 环境变量依赖
依赖系统环境变量:%SystemRoot%、%ProgramFiles%、%ProgramData%、%LOCALAPPDATA%、%USERPROFILE%; 环境变量篡改会导致目录匹配错位,分类统计错乱。
3.4 宿主进程依赖
- 主 UI 宿主:
SystemSettings.exe设置应用;用户打开 “系统‑存储” 页面时加载 DLL。 - 后台消费宿主:
storagesense.dll(存储感知),读取磁盘空闲占比,判断是否达到低磁盘水位触发自动清理。 - 权限跟随宿主:普通用户运行,系统保护目录访问被拒绝,对应空间计入【其他】;需要管理员权限才能完整统计全部系统目录。
3.5 文件系统依赖
- 依赖 NTFS 文件系统 API;处理硬链接、符号链接、目录联结点,防止重复统计;
- EDR / 微过滤驱动如果拦截目录遍历 API,会造成扫描卡死、分类大小异常;
- 不支持扫描被挂载锁定的离线卷。
3.6 日志输出
ETW 通道:Microsoft‑Windows‑StorageUsage/Operational,记录扫描开始、扫描耗时、跳过目录、访问拒绝条目、缓存命中 / 失效事件,排错专用。
四、逻辑链路
链路 A:设置 UI 页面扫描(用户打开 设置 → 系统‑存储)
SystemSettings.exe
→加载 SettingsHandlers_Storage.dll
→COM CoCreateInstance 实例化 storusage.dll
→读取 HKCU\StorageUsage 判断缓存是否有效
if(缓存有效)
直接返回上一次分类统计结果
else
加载内置分类规则白名单
遍历磁盘目录;获取文件大小;做分类打标
处理硬链接、稀疏文件、跳过权限拒绝目录
聚合各个类别总大小(系统、应用、临时、文档、媒体、其他)
写入注册表更新StorageUsage缓存
→把分类数据回传给UI
→UI渲染存储页面条形图与明细
链路 B:被 storagesense.dll 调用(存储感知自动清理)
storagesense.dll(后台任务上下文)
→COM实例化 storusage.dll
→请求获取磁盘总空间 / 空闲空间百分比
→返回磁盘空闲数值
storagesense.dll 判断:空闲空间是否低于阈值,决定是否执行自动清理
重要边界:
storusage.dll不会调用 storagesense.dll;只输出读数,清理逻辑完全在上层 DLL。
五、配套链
- UI 配套
SystemSettings.exe+SettingsHandlers_Storage.dll:设置页面的桥接适配器,负责向用户展示分类磁盘占用。 - 缓存配套 注册表项
HKCU\Software\Microsoft\Windows\CurrentVersion\StorageUsage:扫描结果缓存,减少磁盘 IO 开销。 - 消费方配套
storagesense.dll存储感知组件,使用它的磁盘空闲指标作为自动清理触发条件。 - 排错配套 事件日志
Microsoft‑Windows‑StorageUsage/Operational,排查扫描卡顿、目录跳过、统计不准问题。 - 组策略配套 无单独组策略;受系统存储感知整套组策略间接影响。
- 对比互补组件
cleanmgr.exe:自带独立磁盘占用统计逻辑,和 storusage 完全隔离;dir、Get‑ChildItemPowerShell:系统原生遍历,没有 Windows 设置里的分类逻辑。
六、边界(约束、坑、失效边界)
6.1 权限边界
- DLL 权限继承调用进程;普通用户执行,部分系统目录拒绝访问,无法识别归类,这部分磁盘空间全部计入【其他】;
- 多用户隔离:
HKCU按用户隔离,A 用户的扫描缓存不作用于 B 用户;每个用户打开存储页面会独立扫描生成自己的缓存。
6.2 扫描与分类边界
- 默认可对多个磁盘卷扫描;但存储感知 storagesense.dll 只处理 C 盘,二者职责不同;
- 使用内置固定分类规则白名单;第三方软件私有目录不一定被正确识别,未识别的全部归入【其他】;
- 处理硬链接:同一个文件多硬链接,只统计一次大小,避免虚高;
- 符号链接 /junction 点会做防循环处理,防止无限递归扫描。
6.3 缓存边界
- 缓存不会实时自动刷新;大量拷贝 / 删除文件后,打开存储页面看到旧数据,需要等待缓存过期,或删除注册表缓存强制重扫;
- 系统休眠、快速启动重启,缓存可以保留;磁盘卷变更会使缓存失效。
6.4 COM 故障边界
- CLSID 注册表损坏:设置存储页面一直转圈、空白,0x80040154;
- DLL 文件损坏修复:
sfc /scanfile=C:\Windows\System32\storusage.dll
6.5 性能边界
- 系统盘文件极多的时候,首次全量扫描 IO 压力高,设置页面卡顿;
- 大量权限拒绝目录会拉长扫描耗时;日志可以看到大量 “Access Denied” 事件。
6.6 功能边界(高频混淆)
- ✘
storusage.dll不删除任何文件,没有清理逻辑;清理是 storagesense.dll; - ✘ 不读取 VolumeCaches,与 cleanmgr 完全隔离;
- ✘ 不控制存储感知开关,只提供统计数据。
6.7 外部干扰边界
EDR / 杀毒过滤驱动拦截目录遍历 API,现象:存储页面加载极慢,分类大小明显失真。
七、自动化与排错
7.1 清除缓存强制重新扫描存储统计
# 删除当前用户StorageUsage缓存,打开设置‑存储将触发完整重扫
Remove‑Item -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageUsage" -Recurse -ErrorAction SilentlyContinue
7.2 读取 StorageUsage 事件日志排查扫描异常
Get‑WinEvent -LogName Microsoft‑Windows‑StorageUsage/Operational | Sort‑Object TimeCreated -Descending | Select‑Object TimeCreated,Id,Message | ft
7.3 文件修复
sfc /scanfile=C:\Windows\System32\storusage.dll
Mermaid 时序图
sequenceDiagram
participant UI as SystemSettings.exe
participant Adapter as SettingsHandlers_Storage.dll
participant DLL as storusage.dll
participant Reg as Registry HKCU\StorageUsage
participant FS as NTFS FileSystem
participant ETW as EventLog
UI->>Adapter: 打开存储页面,请求磁盘分类统计
Adapter->>DLL: COM实例化storusage.dll
DLL->>Reg: 查询扫描缓存
alt 缓存有效未过期
DLL-->>Adapter: 返回缓存统计数据
else 缓存失效
DLL->>FS: 按规则遍历目录,分类聚合大小
DLL->>ETW: 记录扫描日志,跳过权限拒绝目录
DLL->>Reg: 写入新扫描缓存
DLL-->>Adapter: 返回分类统计结果
end
Adapter-->>UI: 渲染存储UI条形图明细
Note over DLL: 另外一条链路:被storagesense.dll调用
participant SS as storagesense.dll
SS->>DLL: 请求磁盘空闲百分比
DLL-->>SS: 返回空闲空间数值
Note over SS: storagesense根据阈值判断是否清理
cleanmgr.exe 深度解构分析
路径:
C:\Windows\System32\cleanmgr.exe传统磁盘清理工具;Windows Vista‑Windows11 兼容;独立 EXE 可执行程序。 核心定位:基于VolumeCaches注册表扩展模型,扫描各类系统缓存垃圾;支持 Sagerun 自动化配置; 重要区分:cleanmgr.exe和 Win11 设置页「存储‑临时文件」(storusage.dll+storagesense.dll)是两套完全独立的栈,规则库隔离,互不调用。
一、底层原理
- 可执行程序模型 原生 Win32 EXE,非 COM DLL;既可 GUI 交互运行,也支持命令行静默运行;运行上下文:当前调用用户,部分系统清理项需要管理员权限。
- 内部四大核心模块
- VolumeCaches 配置解析模块:读取注册表
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches,枚举每一个清理器(Cache Handler),每个子项代表一类可清理对象(更新缓存、缩略图、WinSxS 更新备份、用户临时文件、内存转储等)。 - 缓存处理器加载模块:每个 VolumeCaches 项可指定
DLL处理器;cleanmgr 加载对应处理 DLL,由 DLL 实现该类垃圾的扫描计算大小 + 删除逻辑;cleanmgr 本身只是调度外壳。 - GUI 交互模块:读取各个 Cache Handler 返回可释放空间,渲染复选框列表;用户勾选后,调度各个处理器执行删除。
- SageSet 自动化配置模块:把用户勾选状态保存到注册表 SageSet (N);
/sagerun:N直接加载该套勾选配置实现无人值守清理。
- 设计范式
- 插件化模型:清理项由外部 DLL 插件实现,cleanmgr.exe 只做调度外壳;第三方软件理论可注册 VolumeCaches 扩展自定义清理项。
- 卷绑定:按磁盘卷(C:\ D:\)分别执行清理,支持指定驱动器
/d参数。 - 文件处理行为:部分文件移入回收站;系统类缓存直接永久删除;遇到锁定占用文件:部分 Handler 会跳过,部分旧处理器会报错。
关键认知:cleanmgr.exe 本身不内置大量扫描删除代码,更多是调度器;真正扫描删除逻辑分散在各个 VolumeCaches 对应的 Handler‑DLL。 与 StorageSense 体系完全隔离:cleanmgr 不调用 storagesense.dll;storagesense.dll 不读取 VolumeCaches 注册表。
二、依赖文件
| 文件 | 作用说明 |
|---|---|
cleanmgr.exe |
主程序外壳,GUI、命令行、Sagerun 调度逻辑 |
advapi32.dll |
注册表读写,读取 VolumeCaches、SageSet 配置 |
shell32.dll |
Shell UI、回收站操作、文件外壳 API |
kernel32.dll |
文件遍历、文件删除、进程环境 |
comctl32.dll |
GUI 对话框控件库 |
| 各类 Cache‑Handler DLL | 每一类清理项的实际业务实现,示例:cryptnet.dll(更新缓存)、dwmapi.dll、thumbcache.dll缩略图、wer.dll错误报告、winsxs.dll组件存储清理处理器 |
注意:Win11 中部分 VolumeCaches 项已经废弃,对应的 handler DLL 不再维护;部分条目仅保留注册表键,无实际处理逻辑。
三、依赖关系
3.1 核心注册表依赖
- 清理插件库 VolumeCaches(机器级,全局)
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches
每一个子键 = 一个清理类别;子键内参数:
StateFlags:状态标记;DLL:指定处理该缓存的 DLL 文件名;Description、Display:UI 显示名称说明;
此处注册表损坏会出现清理项丢失、点击无响应、计算大小卡死。
- SageSet 自动化配置(用户配置)
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\SageSet0~SageSet9
存储 /sageset:N 交互保存的勾选集合;/sagerun:N读取该配置静默执行。
3.2 命令行参数依赖
/d <driveletter>:选定驱动器;/sageset:N:GUI,手动勾选并保存为 N 号配置;/sagerun:N:加载 N 号配置,静默执行清理; 无参数:弹出图形交互界面。
3.3 权限依赖
- 普通用户:可以清理用户临时文件、缩略图;WinSxS 组件存储、Windows 更新清理、系统转储等条目需要管理员权限;权限不足对应清理项置灰或者直接跳过。
- 多用户:SageSet 存储在 HKCU,每个用户独立一套自动化配置。
3.4 文件系统依赖
- NTFS API;部分处理器需要访问 WinSxS 组件存储目录;
- EDR 微过滤驱动拦截文件删除,会出现显示可清理,执行后空间不变。
3.5 日志
cleanmgr 本身没有专用 ETW 通道;删除、跳过、报错信息分散在:应用程序事件日志、Windows 更新日志、WER 日志。
四、逻辑链路
链路 A:GUI 交互完整链路(直接运行 cleanmgr.exe)
cleanmgr.exe 启动(GUI模式)
→读取HKLM VolumeCaches全部子项
→枚举每一个清理类别
→加载该类别指定的Handler‑DLL
→调用DLL接口:扫描卷,计算可释放空间
→汇总所有类别可释放大小,构建GUI复选框窗口
[用户勾选需要清理的项目,点击确定]
→遍历被勾选的清理项
→调用对应Handler‑DLL的删除接口
→各个DLL完成文件扫描、删除;锁定文件按插件逻辑跳过/报错
→全部完成后GUI提示完成,退出程序
链路 B:自动化流水线 sageset /sagerun
#第一步:生成配置
cleanmgr /sageset:1
弹出GUI,用户勾选清理项
→将勾选状态写入 HKCU\...\VolumeCaches\SageSet1
#第二步:无人值守执行
cleanmgr /sagerun:1
读取 SageSet1 保存的勾选掩码
→读取VolumeCaches,加载对应Handler DLL
→静默执行各个清理项删除,无GUI窗口
执行完毕进程退出
重要:
/sagerun依然继承当前用户权限;系统级清理必须在管理员身份下执行。
五、配套链
- UI 配套:原生 Win32 对话框(comctl32),不是 UWP/SystemSettings.exe;和设置存储页面完全分离。
- 配置配套:
VolumeCaches(全局插件库) +SageSet(用户自动化预设)注册表。 - 功能互补组件
DISM.exe /Online /Cleanup‑Image /StartComponentCleanup:WinSxS 深度组件清理;部分逻辑与 cleanmgr 的 WinSxS handler 复用底层 DLL,但入口独立;storusage.dll + storagesense.dll:Win11 设置存储‑临时文件栈;两套栈规则互不读取。
- 扩展能力配套:第三方程序可注册 VolumeCaches 子项,注册自定义 DLL 实现自定义垃圾清理(该扩展接口现代已经不推荐使用)。
- 运维配套:批处理可封装
sagerun实现旧版系统自动化磁盘清理。
六、边界(约束、坑点、失效边界)
6.1 组件职责边界
cleanmgr.exe只是调度外壳;真正扫描删除由各个 VolumeCaches 对应的 Handler‑DLL 完成;DLL 损坏会造成某一项清理卡死 / 失效,而不是整个程序崩溃。- 完全不读取 StorageSense 注册表;storagesense.dll 不读取 VolumeCaches;两套清理项集合不一样。
现象:cleanmgr 能看到 “Windows 更新清理”,但 Win11 设置‑临时文件不一定显示该项。
6.2 权限边界
- 普通用户运行,系统级清理项(WinSxS、更新备份、系统内存转储)会被跳过或置灰;必须提升管理员权限。
- SageSet 存储在 HKCU;A 用户保存的 sageset 配置,B 用户不能读取。
6.3 卷与扫描边界
- 支持指定任意驱动器
/d D:;VolumeCaches 处理器对数据盘生效;StorageSense 仅默认处理 C 盘。 - 插件模型:个别第三方 / 废弃 VolumeCaches 项,Handler DLL 缺失,会导致 cleanmgr 启动卡死、报错。
6.4 文件处理边界
- 不同 Handler DLL 对 “被占用锁定文件” 行为不一致:有的直接跳过;有的抛出错误弹窗;没有统一的全局跳过策略。
- 部分清理项删除不可逆:例如 Windows 更新备份、WinSxS 旧组件清理完成后,无法卸载已安装更新。
6.5 自动化边界
/sagerun:N不会自动提升权限;脚本中需要显式以管理员运行,否则系统清理项不生效。- SageSet 只保存勾选状态;不保存动态扫描大小;每次
sagerun执行时会重新实时扫描磁盘。
6.6 故障边界
- VolumeCaches 注册表子项损坏、乱项:表现为打开 cleanmgr 卡死、闪退、清理项缺失。
- 文件本体损坏修复:
sfc /scanfile=C:\Windows\System32\cleanmgr.exe
- Win11 趋势:微软逐步弱化 cleanmgr,部分新系统特性不在 VolumeCaches 新增条目,新增清理逻辑放到 StorageSense 栈。
6.7 外部干扰边界
EDR 过滤驱动拦截各个 Handler‑DLL 的文件删除 API,造成统计显示可释放,实际空间不回收。
七、自动化与排错示例
::1. 打开配置界面,保存为编号1配置
cleanmgr /sageset:1
::2. 静默执行编号1配置(必须管理员运行才能完整清理系统项)
cleanmgr /sagerun:1
::3. 指定D盘执行清理
cleanmgr /d D: /sagerun:1
PowerShell 强制管理员上下文执行 sagerun 示例片段:
Start‑Process cleanmgr.exe -ArgumentList "/sagerun:1" -Verb RunAs
Mermaid 时序图
sequenceDiagram
participant CM as cleanmgr.exe
participant RegVol as Registry VolumeCaches
participant RegSage as SageSet(HKCU)
participant HandlerDLL as 各类Cache‑Handler DLL
participant FS as FileSystem
Note over CM: GUI模式启动
CM->>RegVol: 读取全部VolumeCaches清理项
loop 每一个清理类别
CM->>HandlerDLL: 加载指定DLL,调用扫描接口
HandlerDLL->>FS: 扫描对应缓存目录,计算大小
HandlerDLL-->>CM: 返回可释放空间
end
CM->>CM: 构建GUI复选框列表展示
Note over CM: 用户勾选,点击确定
loop 被勾选类别
CM->>HandlerDLL: 调用删除接口
HandlerDLL->>FS: 执行删除,锁定文件按插件逻辑处理
end
Note over CM: /sagerun自动化链路
CM->>RegSage: 读取SageSetN勾选掩码
CM->>RegVol: 加载对应VolumeCaches处理器
loop 勾选的清理项
CM->>HandlerDLL: 执行删除逻辑
end
Windows 磁盘清理 ,Windows 11 系统 -存储-临时文件
Windows 磁盘清理工具和存储管理功能的发展经历了多个版本的更新,尤其是在 Windows 11 系统中,临时文件管理变得更加集成和智能。以下是一个简要的时间线,涵盖了 Windows 系统磁盘清理和临时文件管理的发展:
1. Windows XP - 磁盘清理工具 (Disk Cleanup)
- 发布年份:2001
- 功能:Windows XP 引入了磁盘清理工具(Disk Cleanup),该工具用于删除临时文件、系统缓存、日志文件以及已删除的文件夹和文件等。
- 临时文件清理:主要清理 Internet 临时文件、系统缓存等。
2. Windows Vista - 增强版磁盘清理
- 发布年份:2007
- 功能:Windows Vista 在 XP 的基础上增强了磁盘清理功能,提供了更多的系统文件和更新文件清理选项,例如 Windows 更新清理和 Windows 日志文件。
- 新增功能:加入了清理 Windows 更新和临时系统文件的功能,支持删除服务包的安装文件等。
3. Windows 7 - 更加用户友好的磁盘清理
- 发布年份:2009
- 功能:Windows 7 继续改进了磁盘清理工具,添加了更多可清理项,如 System Restore 和 Shadow Copies(系统还原点和影像文件),使磁盘空间得到更好管理。
- 临时文件清理:优化了临时文件、浏览器缓存和日志文件的清理。
4. Windows 8 - 新的存储管理
- 发布年份:2012
- 功能:Windows 8 增强了存储管理功能,系统可以自动管理临时文件,提升磁盘清理效率。
- 新增功能:提供了存储感知(Storage Sense)功能,帮助用户清理临时文件、卸载不常用的应用程序,并清理垃圾文件。
5. Windows 10 - 存储感知功能的进一步发展
- 发布年份:2015
- 功能:Windows 10 引入了更强大的存储管理功能,特别是存储感知(Storage Sense),它可以自动清理临时文件、旧的 Windows 更新、系统缓存以及已安装的应用程序的缓存。
- 新增功能:
- 存储感知可以定期清理临时文件。
- 增强的磁盘清理工具,支持更复杂的文件清理选项。
- 用户可以通过设置来启用或禁用自动清理功能。
Windows10 存储感知 (Storage Sense) 分析框架
定位:Windows10(2015 首发)磁盘空间自动治理子系统;是对传统
cleanmgr.exe磁盘清理的现代化重构,把一次性手动磁盘清理升级为后台定时自动化存储管理服务;Windows11 的存储感知是在此版本基础之上迭代演进。 版本基线:Windows10 1507 首次引入存储感知雏形,后续 1703、1809 持续扩充能力。1 底层原理
- 磁盘空间压力驱动 + 时间阈值双条件触发原理 存储感知后台任务,监控磁盘可用空间;同时支持按时间周期触发。当可用空间低于阈值、或到达定时周期,启动扫描;识别系统临时文件、更新缓存、回收站、下载目录过期文件等可回收对象。
- 预定义清理项清单过滤原理 内部维护一套清理规则集合:目录路径、文件后缀、文件最小过期时间、文件类型标签;不是粗暴删除整个文件夹;会判断文件最后访问时间、创建时间,只清理满足 “过期” 条件的文件;正在被占用、系统受保护文件直接跳过。
- 后台任务调度模型 存储感知不运行为常驻服务,依托 Windows Task Scheduler 任务计划程序 的后台任务(
\Microsoft\Windows\StorageSense)进行唤醒;闲置、电池 / 电源策略会影响是否执行,减少性能功耗开销。 - UI‑后台分离架构 设置应用(
SystemSettings.exe)提供 UI 界面,供用户开关、配置规则;UI 本身不执行任何文件删除;配置写入注册表;后台任务读取注册表配置,调用storagesense.dll完成扫描、过滤、删除。 - 清理闭环模型 任务被唤醒 → 读取注册表策略 → 遍历预定义目录集合 → 文件状态过滤(保护、占用、过期时间)→ 执行删除 → 记录日志,更新磁盘占用统计。
Windows10 早期 1507 版本存储感知能力有限;1703 之后才开放图形界面开关,早期仅内部生效。
2 依赖文件 / 依赖数据资产
分类 核心依赖文件 / 资产 作用说明 注册表配置 HKCU\Software\Microsoft\Windows\CurrentVersion\StorageSenseHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense总开关、触发条件、过期天数、各类清理项启用状态;组策略同样读写该路径 计划任务 \Microsoft\Windows\StorageSense\StorageSenseTask存储感知后台唤醒触发器,定时 / 空间阈值触发载体 核心二进制 storagesense.dll存储感知核心业务逻辑,扫描、规则判断、文件删除实现 兼容组件 cleanmgr.dll继承传统磁盘清理的部分清理项定义,新旧工具复用部分规则 扫描目标目录 %TEMP%、C:\Windows\Temp、C:\Windows\SoftwareDistribution\Download、C:\Windows.old、回收站目录、应用缓存目录待扫描的各类临时文件存放路径 日志文件 %SystemRoot%\Logs\StorageSense\*.etl / *.log扫描、跳过、删除文件日志,用于排查清理不生效问题 存储统计缓存 WinRT 存储统计数据库 设置‑存储页面展示各分类磁盘占用大小 3 依赖关系
3.1 调用依赖链
任务计划程序(schedsvc.dll) ↓唤醒 storagesense.dll(StorageSenseTask后台任务) ↓系统API调用 kernelbase.dll / advapi32.dll(文件枚举、ACL权限校验、文件删除) ↓ ntoskrnl.exe NTFS文件系统层执行实际IO操作 设置UI(SystemSettings.exe) ↓COM读写注册表 仅修改配置,不直接触发删除;可通过CIM/WMI主动手动触发一次执行故障传导:计划任务损坏 → 自动存储感知完全不跑;注册表键损坏 → 设置界面开关异常;文件被进程锁定 → 文件跳过不予删除;目录 ACL 权限不足 → 统计可见文件,清理无法释放空间。
3.2 软件组件依赖
storagesense.dll:Windows10 新增核心库,存储感知全部业务实现;schedsvc.dll:任务计划服务,负责后台任务调度;cleanmgr.dll:传统磁盘清理组件,提供兼容清理项;systemsettings.exe:设置应用,UI 视图、参数配置载体;- CIM/WMI:对外提供调用接口,支持脚本手动触发存储感知执行;
- 组策略模板:可域环境批量强制开关存储感知、锁定清理策略。
3.3 非技术强依赖
- NTFS 文件系统;FAT32 不支持部分文件时间属性、权限,会影响判断;
- 文件占用锁机制:存储感知不会终止进程抢删文件,被占用直接跳过;
- 电源策略:笔记本电池模式下,后台任务可能被抑制不执行,节省电量;
- 系统版本差异:Win10 1507 只有隐形存储感知,无设置 UI;1703 才开放用户可配置界面。
3.4 故障传导关系
- 计划任务丢失 / 禁用:手动清理还可以用,自动存储感知完全失效;
- 注册表配置损坏:设置页面开关置灰、选项丢失;
- 第三方软件持续占用临时目录:每次扫描全部跳过,临时文件反复出现;
- 组策略强制关闭存储感知:设置中开关不可修改;
- 日志 ETL 损坏:无法排查哪些文件被跳过。
4 逻辑链路
flowchart LR A[系统/应用运行生成临时文件、更新缓存、回收站旧文件] --> B{触发方式} B -->|自动触发:任务计划 时间/磁盘空间阈值| C[StorageSenseTask后台任务唤醒] B -->|手动触发:设置界面 / CIM脚本调用| D[COM接口传入触发指令] C & D --> E[storagesense.dll读取注册表清理策略] E --> F[遍历系统预定义可清理目录清单,枚举全部文件] F --> G{多层过滤判断} G -->|系统受保护文件| H[跳过,写入日志] G -->|进程占用锁定| I[跳过,写入日志] G -->|未达到过期时间条件| J[跳过,写入日志] G -->|匹配清理规则+过期| K[加入待删除集合] H & I & J & K --> L[对待删除集合执行删除;部分文件直接永久删除,部分进入回收站] L --> M[更新磁盘占用统计;输出StorageSense日志] M --> N[后台任务结束休眠,等待下一次触发] N --> A子链路拆分
- 自动后台链路:任务计划驱动,无 UI 静默执行;Win10 重点新增能力;
- 手动触发链路:用户在设置操作或者脚本调用,立刻执行一次扫描清理;
- 配置链路:设置界面仅读写注册表,不参与文件操作。
关键约束:存储感知是事后清理机制,无法阻止程序产生临时文件。
5 配套链
5‑1 硬件配套链
NTFS 格式磁盘;无特殊硬件依赖;笔记本受电池电源状态约束。
5‑2 软件配套链
- 核心组件:
storagesense.dll;计划任务StorageSenseTask; - 传统兼容工具:
cleanmgr.exe磁盘清理工具,Win10 同时保留;二者清理项不完全相同; - CIM/WMI 接口:支持脚本自动化调用存储感知;
- 事件查看器 +
%windir%\Logs\StorageSense日志用于故障排查; - 组策略:企业批量管控存储感知开关与清理规则。
5‑3 业务配套链
- 能力边界:Win10 存储感知支持清理:临时文件、旧 Windows 更新包、回收站过期文件、下载文件夹过期文件;
- 版本差异:早期 Win10 版本功能残缺,越往后版本支持清理类型越多;
- 排查手段:查看 StorageSense 日志,确认哪些文件因为占用 / 保护被跳过;
- 风险提示:清理
Windows.old之后,无法回退旧版本 Windows。
6 边界(限制、坑点、失效边界)
6‑1 技术边界
- 目录白名单边界:仅处理系统内置预定义路径;第三方软件自己私有缓存目录,不会被存储感知扫描清理。
- 占用文件处理边界:不会杀死进程强制删除,被锁定文件直接跳过;表现为 “清理完很快又看到同样临时文件”。
- UI 与后台分离边界:设置只是配置视图;即使 UI 显示正常,如果计划任务损坏,自动清理不会运行。
- 时间阈值边界:回收站、下载文件夹需要满足 “文件过期 N 天” 才会删;刚产生的文件不会被清理。
- 版本边界:Win10 1507 无设置 UI,用户看不到开关,仅系统内部运行;1703 才开放可视化配置。
6‑2 业务边界
- 自动化边界:存储感知只能清理已经生成的垃圾,不能拦截临时文件产生。
- 和 cleanmgr.exe 差异:传统磁盘清理拥有部分系统更新回滚、系统还原点清理项,存储感知早期 Win10 版本并不全部支持。
- 风险边界:开启下载文件夹清理,会把过期下载文档直接删除,存在用户数据丢失风险。
6‑3 失效边界
- StorageSense 计划任务被删除 / 禁用:自动清理彻底不工作,手动 CIM 调用仍可执行;
- 注册表配置被组策略锁定:设置内开关灰色不可更改;
- 磁盘权限 ACL 错乱:扫描统计识别垃圾文件,但是无法执行删除,空间不释放;
- 笔记本电池供电:后台任务被系统节流抑制,存储感知不会自动运行。
7 自动化流水线
7‑1 Win10 存储感知自动流水线(后台任务)
计划任务触发器到达(时间 / 磁盘空间阈值) →唤醒 StorageSenseTask →读取HKCU/HKLM下StorageSense注册表策略 →加载预定义清理目录、过期时间规则 →枚举文件;过滤保护、占用、未过期文件 →执行删除 →写入日志,更新存储统计 →任务休眠等待下一轮触发7‑2 PowerShell 手动调用流水线(Win10 1703 及以上)
# 手动触发一次存储感知执行 Invoke-CimMethod -Namespace Root\Microsoft\Windows\StorageSense -ClassName StorageSense -MethodName RunStorageSense7‑3 简化伪代码
FOR file IN 预定义清理目录集合: IF 文件是系统保护文件: continue IF 文件被进程锁定占用: log("跳过:文件被占用") continue IF 文件存活时间 < 用户配置过期天数: continue IF 该分类清理开关已经启用: delete(file) 记录释放空间,写入日志Windows10 存储感知,本质是把一次性手动磁盘清理升级为后台定时自动化任务;依托任务计划调度,storagesense.dll 实现核心逻辑,设置界面仅修改注册表配置;受文件锁、电源策略、版本迭代影响较大;仅处理系统白名单路径,第三方软件私有缓存不在处理范围;Windows11 的存储感知是在此基础之上继续扩充清理项与 UI 交互。
6. Windows 11 - 集成的临时文件管理和存储感知
- 发布年份:2021
- 功能:Windows 11 在存储和临时文件管理方面进行了更加现代化的整合,存储部分包括了临时文件的集中管理,且更加简洁和易于访问。
- 新增功能:
- 在“设置”中的“存储”选项卡下,用户可以直接管理临时文件和系统文件。
- 存储感知功能得到增强,自动清理临时文件、旧的更新文件以及不必要的系统文件。
- 用户可以在“存储”设置中查看磁盘使用情况,并通过“临时文件”选项删除无用的文件。
7. Windows 11 - 临时文件具体清理选项
- 在 Windows 11 系统中,临时文件的管理和清理方式更加直观:
- 进入 设置 > 系统 > 存储 > 临时文件,用户可以选择清理以下类型的临时文件:
- 系统产生的临时文件:包括 Windows 更新、日志文件等。
- 浏览器缓存和下载文件。
- 应用程序缓存,包括 Microsoft Store 应用的临时文件。
- 错误报告文件,用于系统问题和崩溃的日志。
- 系统可以自动定期删除这些文件,用户也可以手动触发清理操作。
Windows11 临时文件(存储感知‑设置临时文件清理)分析框架
定位:Windows 用户态 + 系统态临时垃圾生命周期管理子模块;包含手动清理(设置‑存储‑临时文件)、存储感知自动清理;负责管理系统更新缓存、日志、应用缓存、转储错误报告、浏览器缓存等;底层调用系统组件完成文件筛选、枚举、删除,并非简单的文件夹删除。
1 底层原理
- 临时文件生命周期原理 系统、应用运行过程会生成中间临时文件:更新解压缓存、日志、崩溃转储、缓存资源、安装临时文件;多数文件程序退出后不再使用,但不会自动删除,持续占用磁盘;部分文件被进程占用,不可直接删除。
- 元数据 + 目录标记原理 Windows 维护一套可清理项清单,定义每一类临时文件对应的目录路径、文件后缀、删除条件;不是全盘删除目录,而是按类别过滤文件;区分:可安全删除、正在使用禁止删除、受保护系统文件。
- 两套执行模式
- 手动模式:设置 → 系统 → 存储 → 临时文件,用户勾选分类,手动点击删除文件;
- 自动模式:存储感知(Storage Sense),按磁盘空闲阈值 / 时间阈值,后台定期自动执行清理。
- COM 组件调度执行原理 设置界面只是 UI 层,本身不做文件删除;UI 通过 COM 调用存储感知相关组件,组件遍历预定义路径,判断文件属性、最后访问时间、占用状态,过滤出待删除文件列表,执行删除;被打开占用的文件跳过不删除。
- 删除闭环模型 UI 勾选清理分类 → 参数传递给后台组件 → 枚举匹配路径文件 → 过滤占用 / 受保护文件 → 执行删除(部分进入回收站,部分直接永久删除)→ 返回清理释放空间结果,更新存储视图。
2 依赖文件 / 依赖数据资产
分类 核心依赖文件 / 资产 作用说明 配置注册表 HKCU\Software\Microsoft\Windows\CurrentVersion\StorageSense;HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\StorageSense存储感知开关、自动清理周期、阈值、各类临时文件清理启用开关 清理项定义 系统内置的可清理项清单(COM 内部定义,部分在注册表);各类临时文件目录清单 定义哪些路径、哪些文件属于临时文件,UI 展示勾选选项来源 目标文件目录 %TEMP%、C:\Windows\Temp、C:\Windows\SoftwareDistribution\Download、%LocalAppData%\Packages\*\LocalState\Cache、C:\Windows\Minidump、错误报告目录、浏览器缓存目录各类临时文件实际存储位置 状态数据 存储统计数据库;磁盘占用扫描缓存;上次存储感知执行时间戳 设置‑存储页面显示磁盘占用大小,判断是否触发自动清理 日志输出 %SystemRoot%\Logs\StorageSense日志文件记录存储感知扫描、删除、跳过文件详情,排查清理失效问题 3 依赖关系
3.1 组件调用依赖链(逻辑调用链)
设置UI (SystemSettings.exe) ↓ COM调用 StorageSense.dll / CleanMgr.dll(磁盘清理组件) ↓ 调用 kernel32.dll / advapi32.dll(文件枚举、删除、权限校验) ↓ NT内核执行文件系统操作(ntoskrnl.exe)故障传导:组件注册损坏 → 设置页面临时文件加载异常;目录权限不足 → 文件跳过无法删除;文件被进程占用 → 该文件跳过保留。
3.2 软件组件依赖
storagesense.dll:存储感知核心实现,负责扫描、判断规则、自动清理;cleanmgr.dll:传统磁盘清理组件,Windows11 设置内的临时文件 UI 底层复用部分逻辑;systemsettings.exe:设置应用,仅做 UI 展示、用户选项收集,本身不执行删除;- advapi32.dll/kernelbase.dll:文件枚举、权限、删除系统 API;
- 注册表:保存存储感知全部策略;组策略可强制管控存储感知行为。
3.3 非技术强依赖
- 文件系统权限:部分系统临时目录需要系统权限;普通用户权限会跳过部分系统级临时文件;
- 文件占用状态:正在被程序锁定的临时文件,无法删除,直接跳过;
- 磁盘文件系统:NTFS;压缩、硬链接、权限 ACL 会影响删除行为;
- 用户策略:组策略可以禁用存储感知、禁用临时文件清理功能。
3.4 故障传导关系
- 注册表存储感知配置损坏:设置页面临时文件选项异常、存储感知不自动运行;
- 目录权限异常:扫描统计到文件,但清理无法删除,磁盘空间不会释放;
- 第三方程序持续占用临时文件:每次清理都跳过该批文件,临时文件越积越多;
- Windows 更新缓存目录异常锁死:更新临时文件类别清理无效果;
- 日志损坏:无法查看存储感知执行排查信息。
4 逻辑链路
flowchart LR A[系统/应用运行产生各类临时文件] --> B{触发来源} B -->|手动触发:设置>系统>存储>临时文件 勾选类别| C[SystemSettings.exe收集用户勾选参数] B -->|自动触发:存储感知达到时间/磁盘阈值| D[StorageSense后台唤醒] C --> E[COM调用传入清理分类参数] D --> E E --> F[组件遍历预定义目录清单,枚举文件] F --> G{文件过滤判断} G -->|系统受保护文件 / 正在被进程占用| H[跳过该文件,记录日志] G -->|匹配临时文件规则,未占用| I[加入待删除列表] H & I --> J[对待删除列表执行删除;部分进回收站,部分直接永久删除] J --> K[统计释放空间,写StorageSense执行日志,更新存储统计缓存] K --> L[设置界面刷新显示磁盘占用;自动模式完成后台静默退出] L --> A子链路拆分
- 手动清理链路:用户 UI 勾选 → 传递参数 → 后台组件执行删除 → UI 反馈结果;
- 存储感知自动链路:后台定时器 / 磁盘阈值触发,无 UI 交互,静默扫描‑过滤‑删除‑写日志。
关键约束:设置界面只是 UI 外壳,真正删除逻辑在 storagesense.dll;UI 不能直接操作文件。
5 配套链
5‑1 硬件配套链
磁盘(NTFS 卷);无特殊硬件依赖。
5‑2 软件配套链
- 核心组件:
storagesense.dll、cleanmgr.dll、systemsettings.exe; - 传统配套工具:
cleanmgr.exe(旧版磁盘清理,Windows11 仍然保留,和设置页面底层共享部分清理项); - 组策略模板:可配置存储感知、临时文件清理策略;
- 日志查看:事件查看器 +
%windir%\Logs\StorageSense文本日志。
5‑3 业务配套链
- 功能开关:存储感知总开关;可配置自动清理时间、删除临时文件阈值、回收站 / 下载文件夹处理规则;
- 边界说明:下载文件夹默认可选清理,谨慎勾选;部分应用私有缓存不在系统临时文件清理范围内;
- 排查手段:查看 StorageSense 日志定位哪些文件被跳过;
- 约束:系统关键更新缓存部分场景不能删除,会影响回滚功能。
6 边界(限制、坑点、失效边界)
6‑1 技术边界
- UI 只是视图边界:设置临时文件页面仅收集选项,不负责文件删除;组件损坏会出现:页面能看到文件大小,点击删除无效果。
- 占用跳过边界:被进程锁定的临时文件不会强制终止进程删除,直接跳过;会出现 “反复看到相同临时文件” 现象。
- 清理项范围边界:仅清理系统预定义清单内路径;第三方软件自己的私有缓存目录,不会被系统临时文件清理扫描到。
- 删除行为差异:部分文件直接永久删除,不会进回收站;下载文件夹勾选后会删除下载内容。
- 权限边界:普通用户无法清理部分系统级临时目录内容,组件自动跳过。
6‑2 业务边界
- 自动化边界:存储感知只是扫描删除已有临时文件,不能阻止程序生成新临时文件;只能事后清理,不能事前拦截。
- 功能区分:
cleanmgr.exe传统磁盘清理 和 设置内临时文件,清理项不完全等价,存在差异。 - 风险边界:删除 Windows 更新旧缓存后,无法卸载对应更新包。
6‑3 失效边界
- 存储感知注册表配置损坏:自动清理完全不执行;手动清理 UI 仍可操作但后台异常;
- 目录 ACL 权限错乱:扫描统计有大量临时文件,执行清理空间不释放;
- 第三方软件常驻,持续占用临时目录文件:每次清理均跳过,垃圾持续累积;
- 组策略强制禁用存储感知:设置页面选项置灰不可操作。
7 自动化流水线
两类流水线:①设置 UI 驱动的手动清理流水线;②存储感知后台自动清理流水线;也支持命令 / 脚本调用实现自动化。
7‑1 存储感知自动清理流水线
系统定时器 / 磁盘空闲阈值条件达成 →唤醒 storagesense.dll 后台任务 →读取注册表配置(启用的清理分类、时间规则) →遍历预定义临时文件目录集合 →过滤受保护、占用文件 →执行删除操作 →写入执行日志,更新存储统计缓存7‑2 PowerShell 间接自动化流水线(调用存储感知触发清理)
# 触发一次存储感知手动执行自动清理 Invoke‑CimMethod -Namespace Root\Microsoft\Windows\StorageSense -ClassName StorageSense -MethodName RunStorageSense7‑3 简化伪代码逻辑
// 临时文件过滤判断逻辑 FOR each file in 预定义临时目录: IF 文件是系统保护文件: continue IF 文件被进程占用锁定: 写入日志:跳过,文件被占用 continue IF 匹配勾选的清理分类: delete(file) 统计释放磁盘空间 记录本次执行日志Windows11 设置里的「临时文件」是UI 展示层 + StorageSense 后台组件的组合;UI 不直接删文件;核心规则写在注册表,扫描删除由 storagesense.dll 完成;对占用文件只跳过不强制结束进程;仅处理系统预定义路径,第三方私有缓存不在处理范围;存储感知属于 “事后清理”,不能阻止临时文件产生。
- 进入 设置 > 系统 > 存储 > 临时文件,用户可以选择清理以下类型的临时文件:
随着 Windows 系统的发展,磁盘清理工具和临时文件管理功能越来越智能和自动化。Windows 11 将清理和存储管理整合进了更简洁的“存储”设置中,并加强了存储感知功能,使用户可以更加高效地管理磁盘空间。

浙公网安备 33010602011771号