C:\Windows\Installer 資料夾裡的安裝快取能不能清
C:\Windows\Installer 是 Windows Installer 的快取。透過 Windows Installer 裝上的軟體,每個 MSI 安裝套件和每個 MSP 修補程式都在這裡留了一份。以後更新、修復或解除安裝這些軟體時,Windows 要用的就是這些複本。微軟的說法很簡單:這個資料夾不應該刪。刪壞了當時看不出來,要等到某個軟體下次更新或解除安裝時才出問題。而且微軟沒有提供任何受支援的清理工具。想安全地拿回空間,要靠解除安裝不用的軟體和別處的清理,不是動這個資料夾。
裡面放的是什麼
微軟關於安裝程式快取的支援文章講了它為什麼存在。用 Windows Installer 安裝一個產品時,解除安裝和更新它所需的重要檔案會存進這個快取。微軟安裝團隊部落格上 Heath Stewart 2008 年的一篇文章講得更細。快取的要不是去掉了內嵌壓縮套件的 .msi,要不是完整的 .msp 修補程式。之後所有的維護操作都會用到它,包括解除安裝這個產品。修補程式要整份保留,是因為更新過的檔案就在修補程式裡。
所以這個資料夾會跟著打過修補程式的 MSI 軟體一起變大。每裝一個修補程式就多一個快取的 .msp,整個資料夾就成了這些軟體以後可能還要用的東西的總帳。微軟的文章裡專門點了 SQL Server 和 Office。辦公室電腦上常見的大頭就是它們。
為什麼刪了以後才出問題
微軟的文章明確說,問題可能要等到解除安裝、修復或更新某個產品時才出現。刪掉一個快取檔當天什麼事都沒有,幾個月後 Office 一次更新失敗,或者某個軟體卸不掉。同一篇文章列了快取檔缺失時安裝記錄裡可能出現的錯誤:
| 代碼 | 大意 |
|---|---|
| 1612 | 這個產品的安裝來源無法使用 |
| 1620 | 無法開啟這個安裝套件 |
| 1635 | 無法開啟這個更新套件 |
| 1636 | 無法安裝 Windows Installer MSP 檔案 |
| 1642 | 無法安裝升級,要升級的程式可能不存在 |
這些代碼也有別的原因,看到其中一個並不能證明是快取壞了。真正讓刪除代價很大的是復原。微軟說這些檔案是每台電腦獨有的,不能從別的電腦複製過來。Windows 支援人員也沒辦法幫你找回。從備份裡只復原缺的那幾個檔案也做不到。能選的只有軟體廠商自己的修復步驟、系統還原點、完整的系統狀態還原,或者重裝 Windows 和所有軟體。
隱藏的 $PatchCache$ 資料夾
資料夾裡還有一個 $PatchCache$,叫基準線快取。修補程式更新一個產品時,Windows Installer 可以把被取代檔案的舊版本存一份,這樣以後再打修補程式或解除安裝修補程式,就不必去找當初的安裝媒體。微軟的 MaxPatchCacheSize 說明寫了上限。預設最多可以用磁碟的 10%。原則設成 0 以後不再存新檔案,而且改原則不會影響已經存下的檔案。
那篇 2008 年的安裝團隊部落格說這些基準線檔案可以刪。代價是之後解除安裝修補程式或復原缺失檔案時,可能會要求提供原始安裝來源。很多幾年前下載安裝的軟體早就找不到安裝套件了。同一篇文章把關閉這份快取當成有代價的取捨,而不是清理收益。先用下面的命令量一下。如果它本來就不大,這筆交換不值得做。
先量,再決定
下面兩條命令只讀取大小,用來看整個資料夾和基準線快取各佔多少。以系統管理員身分開啟 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 和一個修補程式維護工具。如果某個產品的更新報了上面那幾個錯誤,先去看這個廠商的修復或解除安裝說明,而不是先去動資料夾。
更安全的拿回空間的辦法
- 解除安裝不用的軟體:在設定 › 應用程式 › 已安裝的應用程式裡,按微軟的解除安裝步驟來。Windows Installer 本來就是圍繞解除安裝程式設計的,而不是在它背後刪檔案。
- 用磁碟清理的系統檔案類別:Windows 更新清理和傳遞最佳化檔案見 磁碟清理和儲存空間感知怎麼選,元件存放區見 WinSxS 資料夾清理。
- 看看根目錄的大檔:
hiberfil.sys和pagefile.sys經常各有好幾個 GB,取捨見 C 槽根目錄的休眠檔和分頁檔。 - 找出真正佔滿磁碟的東西:遊戲、影片、虛擬磁碟和 Docker 資料更常見,從 怎樣找出佔空間的大檔 開始。
C:\ProgramData\Package Cache 也要同樣小心。微軟的 Dev Drive 文件把套件快取描述為軟體存放更新、解除安裝和修復所需來源檔案的地方,並點名 Visual Studio 的大量資料就放在這裡。
哪些事不要做
不要為了刪除去取得 C:\Windows\Installer 的擁有權,不要為了讓清理數字好看去清空它,也不要從別的電腦複製快取檔來補缺。除非是受影響產品的廠商自己提供的,不要執行刪除「孤立」.msp 檔案的指令碼。
Mole for Windows 不碰這兩個資料夾。清理頁沒有針對 C:\Windows\Installer 或 Package Cache 的規則。軟體頁解除安裝後查找殘留時,名叫 Installer 或 Package Cache 的資料夾會被當成 Windows 和所有軟體共用的目錄,不會算到正在解除安裝的那個軟體名下。
如果佔空間的其實主要是更新檔案而不是安裝程式快取,刪除 Windows 更新檔案 分別說明了每種的代價。動手之前,先看 Windows 還原點和檔案備份。
常見問題
Windows Installer 資料夾可以刪嗎?
不可以。微軟說 Windows Installer 快取不應該刪除。用 MSI 安裝的軟體更新、修復和解除安裝都要用它。刪了以後的問題會晚些才出現。
C:\Windows\Installer 為什麼這麼大?
它為每個 MSI 安裝套件和每個裝過的 MSP 修補程式都留了一份,所以經常打修補程式的軟體,例如 Office、SQL Server,會讓它越來越大。
$PatchCache$ 可以刪嗎?
微軟安裝團隊說過基準線快取檔可以刪,但之後解除安裝修補程式或修復檔案時可能要找原始安裝媒體。先量一下它有多大再決定。
有沒有微軟的工具能清理 Windows Installer 資料夾?
沒有通用的。微軟不認可第三方的快取清理工具,只給了 SQL Server 和 Office 各自的處理步驟。想省空間就在設定裡解除安裝不用的軟體,不要直接改這個資料夾。