# 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` | 所有被取代的舊版本 | 不能再解除安裝 |

只有 `/ResetBase` 會讓所有已裝更新都不能再解除安裝。普通 `/StartComponentCleanup` 只是立刻刪掉舊版本元件，被它刪掉的那部分更新就失去回復路徑。

<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 槽空間分類排查](/tw/windows/blog/windows-c-drive-full) 和 [Windows 快取清理](/tw/windows/blog/windows-cache-cleanup)。系統暫存資料夾和安裝程式快取可以分別看 [Windows 暫存資料夾清理](/tw/windows/blog/windows-temp-folder-cleanup) 和 [Windows Installer 資料夾](/tw/windows/blog/windows-installer-folder-cleanup)。

## 常見問題

### WinSxS 資料夾可以刪嗎？

不可以。微軟警告從 WinSxS 裡刪檔案可能讓 Windows 無法啟動或安裝更新。改用 DISM 清理。

### 為什麼 WinSxS 看起來比磁碟變化大得多？

很多檔案同時也存在於 System32。檔案總管把兩份都算進去，磁碟上只存了一份。想看實際佔用，用 `DISM /Online /Cleanup-Image /AnalyzeComponentStore`。

### /ResetBase 會失去什麼？

執行後，所有已安裝的更新都不能再解除安裝。之後新裝的更新不受影響。

### 不想用命令列，怎麼清理？

磁碟清理 › 清理系統檔案 › Windows 更新清理 也能縮小元件存放區。清完再量一次。


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