Windows 电脑安全清理
核心原则:先审计、后计划、拿到授权、再动手、必核验。
任何一步跳过都会出事。清理是「不可逆操作 + 注册表手术 + 影响工作软件」,不是删几个文件夹。
一、适用场景与触发条件
触发(用户说出任一即可启用)
- 明确要求:「清理电脑」「清一下 C 盘」「电脑越来越卡」「帮我卸载一堆没用的软件」
- 具体目标:「关掉 Windows 广告和推荐」「禁掉开机自启的一堆东西」「清理临时文件」
- 定向除害:「卸载 Autodesk Genuine Service」「Adobe Genuine Service 一直弹窗」「Xbox 那堆预装删掉」
- 周期性维护:用户此前建立过清理习惯,再次要求「按上次那样再清一遍」
不适用(要拒绝或降级)
- 用户想清理别的机器(远程 / 服务器 / 非本机)→ 本 Skill 只管本机 Windows
- 用户想「深度优化」「加速」「破解」「激活」→ 不接,这类操作风险不可控且常违法
- 用户想格式化 / 重装 / 分区 → 这是另一码事,不属于清理
- 目标是 macOS / Linux → 走别的方案
前置条件(开工前必须确认)
- 管理员权限:多数操作(系统 Temp、服务、HKLM、计划任务)需要。审计脚本会输出
ADMIN = True/False。
为False→ 告知用户会有一批项目做不了,让他决定是提权还是只做用户级清理。 - 告知用户:清理前建议保存并关闭正在编辑的文档、退出 AutoCAD 等重型软件(避免占用导致删不掉 / 影响工作成果)。
- 明确回收站策略:默认不清空回收站(可能含用户个人文件),要清必须单独授权。
二、清理范围(四层分类)
> 分类是这套 Skill 的骨架。所有清理对象必须归入下面某一层,层与层的授权要求不同。
L0 — 绝对不动(红线白名单,任何授权都不动)
这些是硬约束,写死在 scripts/cleanup.py 的 L0_WHITELIST 里,不因用户说「全清了」而变。
| 类别 | 具体对象 | 原因 |
|---|---|---|
| 驱动类 | Intel 芯片组 / ME / Serial IO / DTT / Icls / Innovation Platform Framework、声卡、显卡、打印机驱动、固件工具 | 删了机器可能起不来或外设失灵 |
| 安全类 | Windows Defender / 安全中心(SecHealthUI)、第三方杀软(如火绒 Sysdiag) | 拆掉防线,风险不可控 |
| 系统更新 | Windows Update、Microsoft Update Health Tools、C:\Windows\SoftwareDistribution |
破坏更新能力 + 系统组件 |
| 硬件必需 | 厂商管家(如华为电脑管家)、厂商 OSD、多屏协同组件、显卡控制面板 | 影响硬件功能与官方驱动通道 |
| 工作/生产软件 | 用户指定的生产工具(AutoCAD 全家、计价软件、加密锁、安全中间件、Office/WPS 等) | 用户靠它吃饭,误删 = 事故 |
| 授权服务 | 生产软件的授权/许可服务(如 AdskLicensingService) |
删了软件直接不能用 |
| 运行库 | VC++ Redistributable、.NET Runtime、DirectX、Edge WebView2 | 大量软件依赖,删了会连锁崩 |
| 共享框架 | 被主程序依赖的共用框架(如 Autodesk AdODIS) |
名义上是「更新器」,实为主程序更新/重装通道 |
L0 判定口诀:删掉之后,用户明天上班会不会开不了工?会 → 属于 L0。
L1 — 明确垃圾(默认推荐清理,仍需清单确认)
| 子类 | 示例 |
|---|---|
| 厂商许可证骚扰件 | Autodesk Genuine Service、Adobe Genuine Service |
| 错误上报 / 遥测 | Autodesk CER、各类 Crash Reporter |
| 附加管理器 | Autodesk App Manager、云盘鸡肋插件(保存到 Web 和 Mobile) |
| 自动更新器(独立进程) | Autodesk Access、各类 Updater |
| 系统预装 Store 垃圾 | Bing 搜索、人脉、消息、Xbox 全家桶、开始菜单推荐、小组件运行时、PC Manager(与已有杀软重复)、Todos/Whiteboard/邮件日历/Outlook(用户不用时) |
| 广告 / 推荐开关 | ContentDeliveryManager 各项、锁屏贴士、开始菜单推荐、组策略 Widgets |
L2 — 可优化项(需用户逐项拍板)
| 子类 | 处理方式 | 注意 |
|---|---|---|
| 开机自启 | 删 Run 键 / 禁任务 | 逐一列明,别把输入法(ctfmon)、加密锁、杀软删了 |
| 计划任务 | 禁用(优先)或删除 | 更新器类默认「禁」不「删」,可回退 |
| 临时文件 | 用户 Temp、系统 Temp、Prefetch | 会短暂影响程序首次启动速度 |
| 浏览器缓存 | Edge/Chrome 等 | 会退出登录态,必须单独点确认 |
| 回收站 | 清空 | 可能含个人文件,默认不清,单独授权 |
L3 — 灰色地带(默认保留,用户明确说删才删)
- 通信/浏览器类软件:微信、QQ、腾讯会议、浏览器
- 厂商生态附加件(非硬件必需):如 HMS Core、MobileApp Engine
- 来源不明计划任务 / 可疑残留(如孤立的
GWS Task AutoRun、机器没装抖音却有的DouyinGuard) - 疑似业务控件:如 eWebEditor ActiveX(可能招投标系统在用)
L3 处理原则:默认「先禁用不删除」,查明来源再定;绝不在第一轮就删。
三、执行步骤(六阶段,严格顺序)
阶段 0 — 环境准备(踩坑预案)
- 代理变量:
cleanup.py已自动清空http_proxy/https_proxy/HTTP_PROXY/HTTPS_PROXY。
不清会导致 winget 因「大小写重复键」崩溃。 - 日志落盘:脚本自动用 UTF-8 写日志文件,不依赖终端回显。
- 编码:Python 脚本统一 UTF-8;不含 BOM 问题(那是 PowerShell 的坑,本包已改用 Python 规避)。
阶段 1 — 只读审计(禁止改动任何东西)
python scripts/audit.py --workdir <工作目录>
采集八类信息:
- A 桌面程序(三处 Uninstall 键:HKLM 原生 + HKLM WOW6432Node + HKCU,含 DisplayName / Publisher / EstimatedSize / UninstallString / QuietUninstallString)
- B 已装 Store 应用
- C 开机启动命令(Win32_StartupCommand)
- D Run / RunOnce 键
- E 计划任务(排除 \Microsoft\ 核心)
- F 临时文件体量(用户 Temp / 系统 Temp / Prefetch 文件数)
- G 广告/推荐相关注册表当前值
- H 相关服务状态 + 机器环境信息
产物:audit_report.txt
> ⚠️ 审计阶段一个字都不改。哪怕看到明显的垃圾,也先记下来。
阶段 2 — 出清理计划(cleanup_plan.md)
按 L0–L3 分类成表,每项写四列:对象 / 体积 / 风险等级 / 建议动作。
- 明确列出「绝对不动」清单及原因
- 单独一节列「灰色地带,需你拍板」
- 给出预期回收空间合计
- 停下来等用户批准。没批准不许执行。
阶段 3 — 授权确认(分层,见第四节)
阶段 4 — 分阶段执行
不要一次性全干完。按可逆性从高到低分批:
| 批次 | 命令开关 | 可逆性 |
|---|---|---|
| 第 1 批 | --temp |
高(自动重建) |
| 第 2 批 | --startup |
高(可恢复) |
| 第 3 批 | --registry |
中(记下原值) |
| 第 4 批 | --store-apps |
中(可从商店重装) |
| 第 5 批 | --uninstall |
低(需重装) |
| 第 6 批 | --forced |
最低(须备份) |
每批执行后立即核验,再进下一批。
卸载优先级(从温和到激进):
1. winget uninstall --name "<名称>" --silent --accept-source-agreements
2. 官方静默卸载器(从 QuietUninstallString 读取),如 Adobe AdobeCleanUpUtility.exe /s、Autodesk ODIS Installer.exe -i uninstall ... /s
3. msiexec /x {GUID} /qn /norestart /L*v <日志>(走 MSI 时必带日志,便于诊断 1604)
4. 强制手动清理(仅当前三步全部失效,见下)
强制手动清理(最后手段,必须先备份):
1. 导出 ARP 注册表键备份 → reg_backup\*.reg(可双击回退)
2. 删除 ARP 键(原生 + WOW6432Node 两处都查)
3. 删服务:用 CIM,不要用 sc.exe(沙箱/策略常拉黑 sc.exe)
4. 删计划任务:Unregister-ScheduledTask
5. 杀残留进程(拒绝访问的记下来,让用户重启后复核)
阶段 5 — 终态核验(铁证)
python scripts/verify.py --workdir <工作目录>
逐类比对「执行前 vs 执行后」,输出明确的 GONE / STILL 结论:
- ARP 注册表项是否消失
- 服务是否消失(同时确认该保留的服务仍 Running)
- 计划任务是否消失/禁用
- 残留进程是否清空
- 残留目录体积
- 临时文件前后体量对比
阶段 6 — 交付报告
输出 cleanup_report_final.md,必须包含:
1. 结论(计划内是否全部完成)
2. 已完成项逐项表(含核验结果)
3. 铁证核验块(GONE / STILL 清单)
4. 遗留项 + 原因 + 手动收尾指引
5. 全程未触碰清单(对应 L0)
6. 用户收尾建议(重启复核、备份保留期)
四、授权与红线(不可协商)
授权分级
| 层级 | 范围 | 要求 |
|---|---|---|
| A 级(免确认) | 只读审计、临时文件清理、Prefetch | 用户已下达清理意图即可 |
| B 级(清单确认) | 程序卸载、Store 应用、计划任务禁用、开机项 | 展示清单,用户批准《清理计划》 |
| C 级(逐项二次确认) | 注册表写操作、强制清理、清回收站、清浏览器缓存、删共享框架 | 最多两次确认,且明确列出将要执行的命令 |
用户红线(默认强制遵守,除非用户当场明确解除)
- 不删 / 不移 / 不覆盖用户任何原有文件 —— 除非醒目提示 + 两次授权
- 不传任何数据出本机 —— 清理全程纯本地,日志、注册表备份都留在本机
- 不动 L0 白名单 —— 见第二节
- 回收站默认不清空
- 删除前必须先备份(至少注册表;涉及文件走系统回收站机制)
> 若用户在清理过程中改口或提出附加条件 → 立即停下,按新指示办,不擅自继续。
五、经验坑(实测踩过,直接照做)
| 现象 | 原因 | 解法 |
|---|---|---|
| winget 报「字典中的关键字 http_proxy 所添加的关键字 HTTP_PROXY」 | 代理环境变量同时存在大小写两份 | 脚本已自动清空 4 个代理变量 |
msiexec /x 返回 1604 |
Windows Installer 缓存库损坏 | 走强制清理,但必须先导出 ARP 备份 |
Autodesk ODIS 卸载器 0xC0000005 崩溃 |
启动器自身损坏 | 走强制清理 |
| 卸载器返回 0 但软件还在 | 「假成功」,注册表赖着不走 | 强制清理 ARP 键 |
sc.exe 报「拒绝访问」 |
被程序黑名单/沙箱拦截 | 改用 Remove-CimInstance |
批量删除被 SAFE_DELETE_BULK_GUARD 拦截 |
环境护栏限制递归批量删 | 让用户手动删;不要绕护栏 |
| 临时文件「删了 0 MB」 | 递归删除一级失败即整体跳过 | 脚本已改逐文件删除 + 跳过被占用 |
| 计划任务删不掉 | 部分任务有保护 | 降级为 Disable-ScheduledTask(足够断掉行为) |
进程 Kill() 拒绝访问 |
需要提权或受保护进程 | 记录下来,提示用户重启后复核 |
| 中文软件名卸载失败 | 编码 / 匹配问题 | 卸载走 GUID 而非中文名 |
疑点排查法:对来源不明的项(进程 / 任务 / 目录),先跑只读探测(服务名、路径、数字签名、创建时间),查明再定,禁止盲删。
六、效果验证(怎么证明真清了)
- 注册表层:ARP 项消失 = 控制面板「已安装程序」里不再显示
- 服务层:目标服务消失 且 关键保留服务(授权类)仍 Running
- 任务层:
Get-ScheduledTask中状态为 Disabled 或已不存在 - 进程层:相关进程名清空(重启后再查一遍更准)
- 空间层:前后体量实测差值,别用「估算」
- 行为层(用户侧,最终判据):重启后无广告弹窗、无骚扰组件自启、工作软件能正常打开
> 空间数字只认实测差值。若出现负数或 0(全被占用/锁),如实报告,不粉饰。
七、脚本清单
| 脚本 | 作用 | 阶段 |
|---|---|---|
scripts/audit.py |
只读审计 8 类信息,输出 audit_report.txt | 阶段 1 |
scripts/cleanup.py |
分 A–F 六区执行清理,L0 白名单写死在脚本层 | 阶段 4 |
scripts/verify.py |
终态核验,输出 GONE/STILL + 关键服务健康检查 | 阶段 5 |
依赖:仅需 Python 3(不需要第三方包)+ Windows 自带 PowerShell。
常用命令
# 只读审计(最低风险,随时可跑)
python scripts/audit.py --workdir ./cleanup_work
# 标准清理(按需组合开关)
python scripts/cleanup.py --uninstall --store-apps --registry --startup --temp
# 只清临时文件
python scripts/cleanup.py --temp
# 强制清理(仅自动卸载全部失败时;脚本会先导出注册表备份)
python scripts/cleanup.py --forced
# 终态核验
python scripts/verify.py --workdir ./cleanup_work
八、一页速查(执行心法)
审计 → 分类 → 计划 → 授权 → 分批执行 → 核验 → 报告
① 只读先行,绝不边看边删
② 四层分类,L0 白名单写死在脚本里
③ 卸载从温和到激进,MSI 必带日志
④ 强制清理前必须导出注册表备份
⑤ 空间数字只认实测,不清回收站
⑥ 全程本地,零外传