Windows Installer 缓存扫描工具,用于查找 C:\Windows\Installer 中可能不再被已安装软件引用的 .msi 和 .msp 文件。
本工具的设计目标类似 PatchCleaner: 扫描 Windows Installer 缓存 → 判断哪些 MSI/MSP 文件仍被系统引用 → 将未引用文件标记为 orphaned files → 可选地移动到备份目录。
⚠️ 本工具默认不会删除任何文件。⚠️ C:\Windows\Installer是 Windows Installer 的关键缓存目录,请不要手动清空。⚠️ 建议先移动 orphaned files 到非系统盘,观察几天确认系统和软件正常后,再手动删除备份。
Windows Installer 会在系统中维护一组已安装产品和补丁信息。
每个 MSI 产品或 MSP 补丁通常会有一个本地缓存文件路径,即 LocalPackage。
本工具会:
- 调用 Windows Installer API 枚举已安装产品。
- 调用 Windows Installer API 枚举已注册补丁。
- 读取每个产品和补丁的
LocalPackage路径。 - 将这些路径视为“仍被引用”的 Installer 缓存文件。
- 扫描
C:\Windows\Installer下所有.msi和.msp文件。 - 如果某个
.msi/.msp不在引用列表中,则标记为 orphaned file。
- 使用管理员权限打开 PowerShell。
- 运行 dry-run 扫描:
python .\patchcleaner.py- 查看
orphaned_files.csv。 - 使用模拟移动命令:
python .\patchcleaner.py --move-to D:\InstallerBackup- 查看
move_report.csv。 - 确认无误后执行真正移动:
python .\patchcleaner.py --move-to D:\InstallerBackup --apply-
保留备份文件数天或数周。
-
在此期间观察:
- Windows Update 是否正常
- Office 是否正常修复/更新
- Visual Studio 是否正常更新
- Adobe、Autodesk、SQL Server、VMware 等大型软件是否正常
- 已安装软件是否能正常卸载、修复、升级
-
确认没有问题后,再手动删除备份目录中的文件。
| 参数 | 说明 |
|---|---|
--installer-dir |
指定 Installer 缓存目录,默认是 C:\Windows\Installer |
--report-dir |
指定报告输出目录,默认是当前目录下的 patchcleaner_report |
--move-to |
指定 orphaned files 的移动目标目录 |
--apply |
真正执行移动操作。没有此参数时不会移动文件 |
--hash |
计算 MSI/MSP 文件的 SHA-256 哈希 |
汇总信息,例如:
- 扫描时间
- Installer 目录
- 枚举到的产品数量
- 枚举到的补丁数量
- Installer 文件总数量
- orphaned 文件数量
- orphaned 文件总大小
- 当前运行模式
Windows Installer 当前仍在引用的缓存文件列表。
这些文件不应移动或删除。
扫描到的所有 .msi / .msp 文件。
主要字段:
| 字段 | 说明 |
|---|---|
path |
文件完整路径 |
filename |
文件名 |
extension |
文件扩展名 |
size_bytes |
文件大小 |
modified |
修改时间 |
referenced |
是否仍被 Windows Installer 引用 |
sha256 |
文件哈希,仅在使用 --hash 时生成 |
被判断为 orphaned 的 .msi / .msp 文件。
这些文件没有出现在 Windows Installer 当前引用列表中。
注意: 这不代表它们 100% 可以删除,只代表脚本通过 Windows Installer API 没有发现当前引用。
当使用 --move-to 时生成。
主要字段:
| 字段 | 说明 |
|---|---|
path |
原文件路径 |
move_to |
计划或实际移动到的位置 |
moved |
是否已经移动 |
move_error |
移动失败时的错误信息 |
如果不使用管理员权限,Windows Installer API 可能无法枚举所有用户上下文或机器级安装项,导致扫描结果不完整。
建议使用:
Start-Process powershell -Verb runAs然后在管理员 PowerShell 中运行脚本。
本工具更适合个人电脑、测试环境或人工确认后的维护场景。
企业环境建议:
- 先在测试机器验证
- 保留完整备份
- 配合软件资产管理工具
- 避免通过计划任务自动移动或删除 Installer 缓存
- 只能判断 Windows Installer API 当前可见的引用关系。
- 不能保证所有历史安装器依赖都能被发现。
- 非管理员运行时结果可能不完整。
- 某些损坏的 Installer 注册信息可能导致误判。
- 某些老旧软件、企业部署软件、供应商定制安装器可能存在特殊行为。
- 本工具不会分析非
.msi/.msp文件。 - 本工具不会自动删除任何文件。
如果移动文件后发现某些软件无法修复、升级或卸载,可以将备份文件移动回:
C:\Windows\Installer
建议:
- 保留原始文件名。
- 使用管理员权限复制回去。
- 复制后重新尝试修复、更新或卸载软件。
- 如果仍失败,可能需要重新安装相关软件或使用原始安装介质修复。
本工具会分析并可选移动 Windows Installer 缓存文件。 虽然脚本默认采用保守策略,但误判仍然可能发生。
使用前请确认你理解以下风险:
- 软件可能无法修复
- 软件可能无法卸载
- 软件升级可能失败
- 某些补丁回滚可能失败
- 企业软件部署工具可能受到影响
作者不对因使用本工具造成的数据损失、系统故障或软件维护问题负责。