《英雄联盟》(LOL)更新后残留文件长期占用大量磁盘空间,是玩家普遍遭遇的典型技术问题。其根本原因在于Riot客户端采用“增量式热更新”机制:每次更新并非覆盖旧文件,而是下载新版本补丁包(.pak/.bin),并将旧版本完整保留于`/Game/Config/Updates/`或`/RADS/solutions/lol_game_client_sln/releases/`等目录中,用于回滚、校验及断点续更。同时,客户端默认不自动清理历史版本(尤其当检测到自定义皮肤、Mod或第三方工具修改时会主动禁用自动清理),导致数次大版本更新后残留文件可达10–30GB。此外,Windows权限限制或杀毒软件拦截也可能使清理进程失败。该问题虽不影响游戏运行,但显著挤压SSD空间、拖慢磁盘扫描与系统备份效率,且普通用户难以识别哪些文件可安全删除——误删可能导致客户端异常或需重下全量包。
1条回答 默认 最新
Airbnb爱彼迎 2026-02-27 12:50关注```html一、现象层:磁盘空间异常膨胀的可观测特征
玩家在《英雄联盟》(LOL)经历3–5次大版本更新(如14.10 → 14.15 → 14.18 → 14.22)后,
C:\Riot Games\League of Legends\RADS\solutions\lol_game_client_sln\releases\目录下常堆积12–28个完整 release 子目录(如14.10.429.12345、14.15.387.67890),每个平均占用 1.2–2.6 GB;同时Game/Config/Updates/中残留数百个.pak和.bin补丁文件(含patch-14.10-to-14.11.pak等),总量常超 30 GB。Windows 磁盘清理工具无法识别其归属,资源管理器显示“已删除但未释放”状态(因文件句柄被 RiotClient.exe 持有)。此为典型“幽灵空间占用”现象。二、机制层:增量式热更新(Delta Patching)的设计逻辑与副作用
- 原子化版本快照:Riot 客户端将每次发布构建成独立 release 包(含完整
game.dll、assets/、data/),而非覆盖式升级; - 回滚保障优先级高于空间效率:当网络中断或校验失败时,客户端可秒级切换至前一 release 并继续运行;
- 安全熔断策略:若检测到
Plugins/下存在非签名 DLL、DATA/Skins/被手动修改、或进程列表含LOLModLoader.exe等第三方工具,自动清理开关(auto_cleanup_enabled=true)被强制设为false并写入RADS/user/properties/lol.properties; - 校验链依赖:每个
.pak文件含 SHA-256 + RSASSA-PKCS1-v1_5 签名,旧版文件参与新包完整性验证(如 14.22 验证需读取 14.21 的manifest.json)。
三、权限层:Windows 安全模型与清理失败的深层根因
以下为常见权限冲突场景及对应诊断命令:
问题类型 表现 验证命令 修复路径 ACL 继承中断 子目录无“Users”组读取权限 icacls "C:\Riot Games\..." /verify重置继承: icacls "C:\Riot Games\..." /reset /T杀毒软件劫持 Windows Defender 实时保护阻止 cleanup.exe删除Get-MpThreatDetection | ? ThreatName -like "*Riot*"添加排除路径: Add-MpPreference -ExclusionPath "C:\Riot Games\League of Legends\RADS\"四、工程层:安全清理的三级操作体系(面向IT从业者)
- Level 1 — 客户端原生清理(低风险):启动 Riot Client → 设置 → 游戏 → “清理旧版本”按钮(仅对未触发熔断的环境生效);
- Level 2 — RADS CLI 强制清理(中风险,需停服):执行
C:\Riot Games\League of Legends\RADS\system\rads_user_kernel.exe --clean,该命令绕过 UI 熔断检查,但要求所有 Riot 进程已退出; - Level 3 — 手动精简(高风险,需审计):保留最新 2 个 release 目录 + 当前 active release 的
deploy/符号链接指向目录 + 所有Updates/*.pak中文件名含to-当前版本的补丁,其余可删(脚本见下文)。
五、自动化层:生产级清理脚本(PowerShell 7+)
# 安全清理脚本:lol-cleanup-safe.ps1(需以 Administrator 运行) $base = "C:\Riot Games\League of Legends" $releases = Get-ChildItem "$base\RADS\solutions\lol_game_client_sln\releases\" -Directory | Sort-Object Name -Descending | Select-Object -Skip 2 $releases | ForEach-Object { Write-Host "Removing obsolete release: $($_.Name)" -ForegroundColor Yellow Remove-Item $_.FullName -Recurse -Force -ErrorAction SilentlyContinue } # 清理过期 .pak(仅保留最近90天及关联当前版本的补丁) Get-ChildItem "$base\Game\Config\Updates\*.pak" | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-90) -and $_.Name -notmatch "to-$(Get-Content "$base\RADS\solutions\lol_game_client_sln\releases\active\version.txt")" } | Remove-Item -Force六、架构层:可视化清理决策流程(Mermaid)
flowchart TD A[启动清理流程] --> B{客户端是否正在运行?} B -->|是| C[提示:请关闭Riot Client & LOL客户端] B -->|否| D{是否启用自动清理?} D -->|否| E[检查lol.properties中的auto_cleanup_enabled] D -->|是| F[执行内置清理] E --> G[检查Plugins/ DATA/Skins/ 是否被修改] G -->|存在非签名文件| H[手动清理模式激活] G -->|洁净| I[启用RADS CLI强制清理] H --> J[生成清理白名单报告] I --> K[执行rads_user_kernel.exe --clean]```本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报- 原子化版本快照:Riot 客户端将每次发布构建成独立 release 包(含完整