Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

PatchCleaner-like Windows Installer Cache Scanner

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。

本工具会:

  1. 调用 Windows Installer API 枚举已安装产品。
  2. 调用 Windows Installer API 枚举已注册补丁。
  3. 读取每个产品和补丁的 LocalPackage 路径。
  4. 将这些路径视为“仍被引用”的 Installer 缓存文件。
  5. 扫描 C:\Windows\Installer 下所有 .msi 和 .msp 文件。
  6. 如果某个 .msi / .msp 不在引用列表中,则标记为 orphaned file。

操作流程

  1. 使用管理员权限打开 PowerShell。
  2. 运行 dry-run 扫描:
python .\patchcleaner.py
  1. 查看 orphaned_files.csv。
  2. 使用模拟移动命令:
python .\patchcleaner.py --move-to D:\InstallerBackup
  1. 查看 move_report.csv。
  2. 确认无误后执行真正移动:
python .\patchcleaner.py --move-to D:\InstallerBackup --apply
  1. 保留备份文件数天或数周。

  2. 在此期间观察:

    • Windows Update 是否正常
    • Office 是否正常修复/更新
    • Visual Studio 是否正常更新
    • Adobe、Autodesk、SQL Server、VMware 等大型软件是否正常
    • 已安装软件是否能正常卸载、修复、升级
  3. 确认没有问题后,再手动删除备份目录中的文件。


命令行参数

参数 说明
--installer-dir 指定 Installer 缓存目录,默认是 C:\Windows\Installer
--report-dir 指定报告输出目录,默认是当前目录下的 patchcleaner_report
--move-to 指定 orphaned files 的移动目标目录
--apply 真正执行移动操作。没有此参数时不会移动文件
--hash 计算 MSI/MSP 文件的 SHA-256 哈希

报告文件说明

summary.json

汇总信息,例如:

  • 扫描时间
  • Installer 目录
  • 枚举到的产品数量
  • 枚举到的补丁数量
  • Installer 文件总数量
  • orphaned 文件数量
  • orphaned 文件总大小
  • 当前运行模式

referenced.json

Windows Installer 当前仍在引用的缓存文件列表。

这些文件不应移动或删除。


all_installer_files.csv

扫描到的所有 .msi / .msp 文件。

主要字段:

字段 说明
path 文件完整路径
filename 文件名
extension 文件扩展名
size_bytes 文件大小
modified 修改时间
referenced 是否仍被 Windows Installer 引用
sha256 文件哈希,仅在使用 --hash 时生成

orphaned_files.csv

被判断为 orphaned 的 .msi / .msp 文件。

这些文件没有出现在 Windows Installer 当前引用列表中。

注意: 这不代表它们 100% 可以删除,只代表脚本通过 Windows Installer API 没有发现当前引用。


move_report.csv

当使用 --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

建议:

  1. 保留原始文件名。
  2. 使用管理员权限复制回去。
  3. 复制后重新尝试修复、更新或卸载软件。
  4. 如果仍失败,可能需要重新安装相关软件或使用原始安装介质修复。

免责声明

本工具会分析并可选移动 Windows Installer 缓存文件。 虽然脚本默认采用保守策略,但误判仍然可能发生。

使用前请确认你理解以下风险:

  • 软件可能无法修复
  • 软件可能无法卸载
  • 软件升级可能失败
  • 某些补丁回滚可能失败
  • 企业软件部署工具可能受到影响

作者不对因使用本工具造成的数据损失、系统故障或软件维护问题负责。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages