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 | 无法打开这个更新包 |
| 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 Installer 文件夹可以删吗?
不可以,微软说 Windows Installer 缓存不应该删除,用 MSI 安装的软件更新、修复和卸载都要用它,删了以后的问题会晚些才出现。
C:\Windows\Installer 为什么这么大?
它为每个 MSI 安装包和每个装过的 MSP 补丁都留了一份,所以经常打补丁的软件,比如 Office、SQL Server,会让它越来越大。
$PatchCache$ 可以删吗?
微软安装团队说过基线缓存文件可以删,但之后卸载补丁或修复文件时可能要找原始安装介质,先量一下它有多大再决定。
有没有微软的工具能清理 Windows Installer 文件夹?
没有通用的,微软不认可第三方的缓存清理工具,只给了 SQL Server 和 Office 各自的处理步骤,想省空间就在设置里卸载不用的软件,不要直接改这个文件夹。