# WinSxS 目录这么大，能清理吗？

清理 C 盘时常会看到 `C:\Windows\WinSxS` 占了好几个 GB，有时比整个程序目录还大，它在 Windows 文件夹里，删又删不掉，于是常有人问它到底能不能动。能动，但只能交给 Windows 自己的工具，而且先要弄清那个数字里有多少是真的占用。

## 为什么它看起来那么大

WinSxS 是组件存储，Windows 的组件都放在这里，更新出问题时回滚、修复损坏的系统文件，靠的也是它。[微软的说明](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/determine-the-actual-size-of-the-winsxs-folder)讲了它显得大的原因，很多文件看起来同时在 System32 和 WinSxS 里各有一份，磁盘上其实只存了一份，另一处是硬链接，资源管理器这类按目录累加的工具不认硬链接，同一份数据就被算了两次。

## 先量出真实开销

以管理员身份打开命令提示符，运行：

```cmd
Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore
```

输出里的几行要分开看：

- **Windows Explorer Reported Size of Component Store**：资源管理器算出来的大小，没有扣掉硬链接。
- **Actual Size of Component Store**：扣掉硬链接后的大小，但里面还包括和 Windows 共用的文件。
- **Shared with Windows**：在别处也能看到、系统正常运行要用的文件，不算额外开销。
- **Backups and Disabled Features** 和 **Cache and Temporary Data**：这两项加起来才是组件存储的额外开销，也是清理能动到的部分。
- **Component Store Cleanup Recommended**：显示 Yes 时，清理可能会有收获。

微软给的示例里，资源管理器显示 4.98 GB，真正的额外开销只有 507 MB 左右，所以先量再清，免得为一个大半是共用文件的数字折腾半天。

## 不要手动删

微软的警告很明确，从 WinSxS 里删文件，或者把整个文件夹删掉，可能让电脑无法启动，也装不了更新，有些重要的系统文件只存在这里。拿到 TrustedInstaller 权限强行删，结果也是一样。

## 用 DISM 清理

Windows 自己会定期清，计划任务 StartComponentCleanup 在电脑空闲时运行，一个组件更新装好至少 30 天后才移除它的旧版本，每次最多运行一小时。想现在就清，可以运行：

```cmd
Dism.exe /Online /Cleanup-Image /StartComponentCleanup
```

[微软的清理说明](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/clean-up-the-winsxs-folder)讲了它和计划任务的区别，旧版本组件会立刻删除，没有 30 天的等待，也没有一小时的限制。

再加上 `/ResetBase` 会清得更多：

```cmd
Dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase
```

它会移除每个组件所有被取代的旧版本，执行完以后，已经装上的更新都不能再卸载，之后新装的更新不受影响。能收回多少空间，要看上面那两项开销有多大，不是一个固定的数字，刚装完一个大更新、还不确定稳不稳的时候，先别加这个参数。

| 命令 | 清理范围 | 已装更新能否卸载 |
| --- | --- | --- |
| `/StartComponentCleanup` | 被取代的旧版本组件 | 仍然可以 |
| `/StartComponentCleanup /ResetBase` | 所有被取代的旧版本 | 不能再卸载 |

<figure class="blog-diagram">
  <picture>
    <source media="(max-width: 900px)" srcset="/img/blog/windows-winsxs-folder-cleanup-windows-zh-mobile.webp" type="image/webp" width="768" height="1180">
    <img src="/img/blog/windows-winsxs-folder-cleanup-windows-zh.webp" width="1360" height="454" loading="lazy" alt="先量出开销，再用 DISM 清理">
  </picture>
  <figcaption>先用分析命令分清额外开销和共用文件，再做组件清理，ResetBase 是可选的一步，代价是已装更新不能再卸载。</figcaption>
</figure>

## 不想用命令行

磁盘清理里点“清理系统文件”，勾选“Windows 更新清理”，也能减小组件存储，微软的说明里同样提到了这一项。不管用哪种方式，清完再跑一次分析命令对比前后的数字，比看资源管理器里的大小更准。想接着排查别的占用，可以看 [C 盘空间分类排查](/zh/windows/blog/windows-c-drive-full) 和 [Windows 缓存清理](/zh/windows/blog/windows-cache-cleanup)。


Canonical: https://mole.fit/zh/windows/blog/winsxs-folder-cleanup-windows
