• 首页
  • 关于

鸽子窝:Pigeon's Blog

笨蛋鸽子的小窝
技术

CapabilityAccessManager异常膨胀

2026-05-23 浏览量 0 暂无评论

最近发现 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。

最终解决流程是:

  1. 用 SpaceSniffer 定位异常大文件
  2. 确认它位于 CapabilityAccessManager 目录
  3. 重启进入安全模式
  4. 修改高级安全设置里的所有者
  5. 停止 Capability Access Manager 相关服务
  6. 删除异常文件或目录
  7. 正常重启后复查

这类问题最麻烦的地方不在于“找不到文件”,而在于它位于系统目录下,普通权限无法直接处理。相比在正常模式下强删,进入安全模式、改所有者、停服务后再删除才行。

WindowsC盘清理CapabilityAccessManager
Mac 合盖后没有休眠,拿出来烫得离谱
HiveD:意外朴素的算法

评论/ 取消评论

  • 文章目录
  • 站点概览
    author

    12 日志
    5 分类
    Creative Commons

    浏览量 : 0

    © 2026 鸽子窝:Pigeon's Blog. Power By Typecho . Theme by Shiyi

    This is just a placeholder img.