CapabilityAccessManager异常膨胀
最近发现 Windows 的 C 盘空间又快满了。用 SpaceSniffer 扫了一下,发现一个非常离谱的大文件:
C:\ProgramData\Microsoft\Windows\CapabilityAccessManager\db-wal它竟然占了二十多 GB。
这显然不是普通的用户文件,也不像是可以直接删除的软件缓存。于是这次记录一下完整排查和修复过程。
C 盘空间异常减少
一开始 C 盘只剩十几 GB 可用空间。用 SpaceSniffer 扫描后,发现主要空间占用来自几个部分:
- C:\Users{Username}
- C:\Windows
- C:\Program Files
- C:\ProgramData
用户目录下面有一些正常的大缓存,比如:
- .cache
- AppData\Local\Temp
- pip cache
- conda cache
- uv cache
这些都比较好处理,用对应工具清掉即可。
真正异常的是:CapabilityAccessManager\db-wal,这个文件单独占用了二十多 GB。
这个文件是什么?
CapabilityAccessManager 是 Windows 用来管理应用权限的组件,比如摄像头、麦克风、位置、文件系统等访问权限。
目录大致位于:
C:\ProgramData\Microsoft\Windows\CapabilityAccessManager
其中 db / db-shm / db-wal 这一组文件看起来像 SQLite 数据库相关文件:
- db:主数据库文件
- db-shm:共享内存文件
- db-wal:Write-Ahead Log,预写日志文件
动手修复
正常情况下,db-wal 不应该膨胀到几十 GB。它变得特别大,一般可以认为是某种异常残留或日志没有正常回收。
第一步:确认是不是它占用空间
用 PowerShell 查看大小:
Get-ChildItem "C:\ProgramData\Microsoft\Windows\CapabilityAccessManager" -Force |
Select-Object Name, Length看到 db-wal 特别大,比如十几 GB 或几十 GB,就基本可以确认问题点。
第二步:不要直接在正常模式下硬删
这个目录属于系统组件,直接删除大概率会遇到权限问题,或者提示文件正在被占用。
我一开始的思路是:
Stop-Service camsvc -Force
(camsvc 是 Capability Access Manager Service)
但是实际操作时,即使停止服务,仍然可能因为权限、所有者或文件占用问题无法删除。
所以最后采用的是更稳的流程:
重启进入安全模式
→ 修改高级安全设置里的所有者
→ 停止相关服务
→ 删除异常文件/文件夹
→ 正常重启
第三步:重启进入安全模式
可以通过系统设置进入安全模式:
设置
→ 系统
→ 恢复
→ 高级启动
→ 立即重新启动
重启后选择:
疑难解答
→ 高级选项
→ 启动设置
→ 重启
→ 选择安全模式
也可以使用 msconfig:
Win + R
→ msconfig
→ 引导
→ 安全引导
→ 最小
→ 重启
注意:用 msconfig 进入安全模式后,修复完成记得取消“安全引导”,否则之后会一直进安全模式。
第四步:修改目录所有者
进入安全模式后,打开目录:
C:\ProgramData\Microsoft\Windows\CapabilityAccessManager
如果提示没有权限,就需要修改所有者。
操作路径:
右键 CapabilityAccessManager
→ 属性
→ 安全
→ 高级
→ 所有者
→ 更改
输入当前用户,或者使用Administrators就行。
然后点击“检查名称”,确认后应用。
如果有“替换子容器和对象的所有者”,也要勾选。
接着给当前用户或 Administrators 添加完全控制权限:
高级安全设置
→ 添加
→ 选择主体
→ 输入当前用户 / Administrators
→ 勾选完全控制
→ 应用
第五步:停止服务
在安全模式下,服务一般已经少很多了,但仍然可以尝试停止相关服务。
用管理员 PowerShell 执行:
Stop-Service camsvc -Force
如果服务不存在、未运行或无法停止,可以先跳过,重点是确认目标文件不再被占用。
第六步:删除异常文件
进入目录:
C:\ProgramData\Microsoft\Windows\CapabilityAccessManager
直接删除整个 CapabilityAccessManager 文件夹,让 Windows 后续重新生成。
第七步:正常重启并复查
重启回正常模式后,再扫一次 C 盘。
这次 C 盘空间明显恢复,db-wal 那个二十多 GB 的异常占用消失了。
可以再检查一下目录是否被 Windows 自动重建:
Get-ChildItem "C:\ProgramData\Microsoft\Windows\CapabilityAccessManager" -Force如果系统能正常启动,应用权限设置也正常,基本就说明问题解决。
总结
这次 C 盘异常占用的核心问题是:
C:\ProgramData\Microsoft\Windows\CapabilityAccessManager\db-wal
异常膨胀到了二十多 GB。
最终解决流程是:
- 用 SpaceSniffer 定位异常大文件
- 确认它位于 CapabilityAccessManager 目录
- 重启进入安全模式
- 修改高级安全设置里的所有者
- 停止 Capability Access Manager 相关服务
- 删除异常文件或目录
- 正常重启后复查
这类问题最麻烦的地方不在于“找不到文件”,而在于它位于系统目录下,普通权限无法直接处理。相比在正常模式下强删,进入安全模式、改所有者、停服务后再删除才行。