# C:\Windows\Installer 資料夾裡的安裝快取能不能清

`C:\Windows\Installer` 是 Windows Installer 的快取。透過 Windows Installer 裝上的軟體，每個 MSI 安裝套件和每個 MSP 修補程式都在這裡留了一份。以後更新、修復或解除安裝這些軟體時，Windows 要用的就是這些複本。微軟的說法很簡單：這個資料夾不應該刪。刪壞了當時看不出來，要等到某個軟體下次更新或解除安裝時才出問題。而且微軟沒有提供任何受支援的清理工具。想安全地拿回空間，要靠解除安裝不用的軟體和別處的清理，不是動這個資料夾。

## 裡面放的是什麼

[微軟關於安裝程式快取的支援文章](https://learn.microsoft.com/en-us/troubleshoot/windows-client/application-management/missing-windows-installer-cache)講了它為什麼存在。用 Windows Installer 安裝一個產品時，解除安裝和更新它所需的重要檔案會存進這個快取。微軟安裝團隊部落格上 Heath Stewart 2008 年的[一篇文章](https://devblogs.microsoft.com/setup/why-windows-installer-may-require-so-much-disk-space/)講得更細。快取的要不是去掉了內嵌壓縮套件的 `.msi`，要不是完整的 `.msp` 修補程式。之後所有的維護操作都會用到它，包括解除安裝這個產品。修補程式要整份保留，是因為更新過的檔案就在修補程式裡。

所以這個資料夾會跟著打過修補程式的 MSI 軟體一起變大。每裝一個修補程式就多一個快取的 `.msp`，整個資料夾就成了這些軟體以後可能還要用的東西的總帳。微軟的文章裡專門點了 SQL Server 和 Office。辦公室電腦上常見的大頭就是它們。

<figure class="blog-diagram">
  <picture>
    <source media="(max-width: 900px)" srcset="/img/blog/windows-windows-installer-folder-cleanup-zh-mobile.webp" type="image/webp" width="768" height="1180">
    <img src="/img/blog/windows-windows-installer-folder-cleanup-zh.webp" width="1360" height="454" loading="lazy" alt="快取的安裝套件什麼時候被用到">
  </picture>
  <figcaption>安裝時把安裝套件複製進快取，之後更新、修復和最後的解除安裝都要再讀取它。</figcaption>
</figure>

## 為什麼刪了以後才出問題

微軟的文章明確說，問題可能要等到解除安裝、修復或更新某個產品時才出現。刪掉一個快取檔當天什麼事都沒有，幾個月後 Office 一次更新失敗，或者某個軟體卸不掉。同一篇文章列了快取檔缺失時安裝記錄裡可能出現的錯誤：

| 代碼 | 大意 |
| --- | --- |
| 1612 | 這個產品的安裝來源無法使用 |
| 1620 | 無法開啟這個安裝套件 |
| 1635 | 無法開啟這個更新套件 |
| 1636 | 無法安裝 Windows Installer MSP 檔案 |
| 1642 | 無法安裝升級，要升級的程式可能不存在 |

這些代碼也有別的原因，看到其中一個並不能證明是快取壞了。真正讓刪除代價很大的是復原。微軟說這些檔案是每台電腦獨有的，不能從別的電腦複製過來。Windows 支援人員也沒辦法幫你找回。從備份裡只復原缺的那幾個檔案也做不到。能選的只有軟體廠商自己的修復步驟、系統還原點、完整的系統狀態還原，或者重裝 Windows 和所有軟體。

## 隱藏的 `$PatchCache$` 資料夾

資料夾裡還有一個 `$PatchCache$`，叫基準線快取。修補程式更新一個產品時，Windows Installer 可以把被取代檔案的舊版本存一份，這樣以後再打修補程式或解除安裝修補程式，就不必去找當初的安裝媒體。[微軟的 MaxPatchCacheSize 說明](https://learn.microsoft.com/en-us/windows/win32/msi/maxpatchcachesize)寫了上限。預設最多可以用磁碟的 10%。原則設成 0 以後不再存新檔案，而且改原則不會影響已經存下的檔案。

那篇 2008 年的安裝團隊部落格說這些基準線檔案可以刪。代價是之後解除安裝修補程式或復原缺失檔案時，可能會要求提供原始安裝來源。很多幾年前下載安裝的軟體早就找不到安裝套件了。同一篇文章把關閉這份快取當成有代價的取捨，而不是清理收益。先用下面的命令量一下。如果它本來就不大，這筆交換不值得做。

## 先量，再決定

下面兩條命令只讀取大小，用來看整個資料夾和基準線快取各佔多少。以系統管理員身分開啟 PowerShell 執行：

```powershell
(Get-ChildItem C:\Windows\Installer -Force -Recurse -File -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum / 1GB
(Get-ChildItem 'C:\Windows\Installer\$PatchCache$' -Force -Recurse -File -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum / 1GB
```

拿結果和整顆磁碟的容量比一比。500 GB 的磁碟上佔幾個 GB，是裝著打過修補程式的軟體的正常代價。如果數字特別大，電腦上又裝著 Office 或 SQL Server，通常就是它們。該用的也是它們自己的工具。

## 孤立的安裝套件，只走官方路線

產品卸掉以後殘留下來的修補程式，常被叫作孤立安裝套件。很多人找清理工具就是為了它們。微軟的文章正面回答過：有些第三方聲稱能重建或修復安裝程式快取，微軟不建議、也不認可其中任何一家，用了風險自負。微軟也沒有一個通用工具來判斷哪些快取檔沒人用並把它們刪掉。

官方有的是按產品來的辦法。SQL Server 的話，同一篇文章連結了微軟在 SQL Server 更新時復原缺失快取檔的步驟。Office 的話，它指向 Robust Office Inventory Scan 和一個修補程式維護工具。如果某個產品的更新報了上面那幾個錯誤，先去看這個廠商的修復或解除安裝說明，而不是先去動資料夾。

## 更安全的拿回空間的辦法

- **解除安裝不用的軟體**：在設定 › 應用程式 › 已安裝的應用程式裡，按[微軟的解除安裝步驟](https://support.microsoft.com/en-us/windows/uninstall-or-remove-apps-and-programs-in-windows-4b55f974-2cc6-2d2b-d092-5905080eaf98)來。Windows Installer 本來就是圍繞解除安裝程式設計的，而不是在它背後刪檔案。
- **用磁碟清理的系統檔案類別**：Windows 更新清理和傳遞最佳化檔案見 [磁碟清理和儲存空間感知怎麼選](/tw/windows/blog/disk-cleanup-vs-storage-sense-windows)，元件存放區見 [WinSxS 資料夾清理](/tw/windows/blog/winsxs-folder-cleanup-windows)。
- **看看根目錄的大檔**：`hiberfil.sys` 和 `pagefile.sys` 經常各有好幾個 GB，取捨見 [C 槽根目錄的休眠檔和分頁檔](/tw/windows/blog/hiberfil-pagefile-c-drive-windows)。
- **找出真正佔滿磁碟的東西**：遊戲、影片、虛擬磁碟和 Docker 資料更常見，從 [怎樣找出佔空間的大檔](/tw/windows/blog/find-large-files-on-windows) 開始。

`C:\ProgramData\Package Cache` 也要同樣小心。微軟的 [Dev Drive 文件](https://learn.microsoft.com/en-us/windows/dev-drive/)把套件快取描述為軟體存放更新、解除安裝和修復所需來源檔案的地方，並點名 Visual Studio 的大量資料就放在這裡。

## 哪些事不要做

不要為了刪除去取得 `C:\Windows\Installer` 的擁有權，不要為了讓清理數字好看去清空它，也不要從別的電腦複製快取檔來補缺。除非是受影響產品的廠商自己提供的，不要執行刪除「孤立」`.msp` 檔案的指令碼。

Mole for Windows 不碰這兩個資料夾。清理頁沒有針對 `C:\Windows\Installer` 或 `Package Cache` 的規則。軟體頁解除安裝後查找殘留時，名叫 Installer 或 Package Cache 的資料夾會被當成 Windows 和所有軟體共用的目錄，不會算到正在解除安裝的那個軟體名下。

如果佔空間的其實主要是更新檔案而不是安裝程式快取，[刪除 Windows 更新檔案](/tw/windows/blog/delete-windows-update-files) 分別說明了每種的代價。動手之前，先看 [Windows 還原點和檔案備份](/tw/windows/blog/windows-restore-points-and-backups)。

## 常見問題

### Windows Installer 資料夾可以刪嗎？

不可以。微軟說 Windows Installer 快取不應該刪除。用 MSI 安裝的軟體更新、修復和解除安裝都要用它。刪了以後的問題會晚些才出現。

### C:\Windows\Installer 為什麼這麼大？

它為每個 MSI 安裝套件和每個裝過的 MSP 修補程式都留了一份，所以經常打修補程式的軟體，例如 Office、SQL Server，會讓它越來越大。

### $PatchCache$ 可以刪嗎？

微軟安裝團隊說過基準線快取檔可以刪，但之後解除安裝修補程式或修復檔案時可能要找原始安裝媒體。先量一下它有多大再決定。

### 有沒有微軟的工具能清理 Windows Installer 資料夾？

沒有通用的。微軟不認可第三方的快取清理工具，只給了 SQL Server 和 Office 各自的處理步驟。想省空間就在設定裡解除安裝不用的軟體，不要直接改這個資料夾。


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