深色模式
客户端、启动器与更新器
本章你将学到:一个"游戏平台客户端"这类软件在电脑里由哪几部分组成、各自放在什么位置;版本号、更新、下载、缓存、配置这几个环节分别会出什么问题、表现是什么;覆盖安装、卸载重装、干净重装到底有什么区别;安装目录怎么选才不容易出事;以及"程序自己消失了"这件事背后的三类原因。
什么时候用得上:用户说"更新卡住了""重装了还是不行""界面显示不对""下载到一半失败""双击没反应""过一会儿自己关了"。这些是客户端层最常见的问题,理解了本章的通用结构,再去看 客户端 里平台的具体细节会轻松很多。
启动器类软件的通用结构
我们的客户端、Steam、各种游戏平台的启动器,虽然长得不一样,但内部结构大同小异。一个启动器不是"一个程序",而是一组程序加一堆数据:
| 部件 | 大白话 | 出问题时的典型表现 |
|---|---|---|
| 主程序 | 用户双击的那个图标背后的程序,负责界面、登录、房间 | 打不开、界面异常、闪退 |
| 更新器 | 启动时检查有没有新版本,有就下载替换 | 卡在"正在更新"、反复更新、更新完还是旧版 |
| 下载器 | 负责把几十 GB 的游戏文件下到用户指定的目录 | 下载慢、卡住、校验失败 |
| 配置 | 记录用户的设置:下载目录、登录信息、界面选项 | 设置丢失、每次都要重新选、某项设置改不了 |
| 缓存 | 为了快而暂存的数据:图片、网页、临时文件 | 界面显示旧内容、图片加载不出、界面错位 |
| 日志 | 程序自己记的运行流水账 | 不会出问题,但是排查的关键材料,见 日志怎么找、怎么读 |
| 运行时组件 | 程序依赖的公共零件:VC++ 运行库、WebView2、.NET | 报"缺少 xxx.dll"、界面空白、"无法正常启动" |
| 附属组件 | 反作弊、驱动、后台服务 | 需要管理员权限,容易被安全软件拦,见 反作弊通用知识 |
大白话
把客户端想成一家小店:主程序是门面,更新器是每天早上进货的人,下载器是搬运大件货的货车,配置是店长记的小本子,缓存是收银台旁边顺手放的东西,日志是监控录像。任何一个环节坏了,店都"开不了"或者"不对劲",但修法完全不同。
这些东西分别放在哪
Windows 上程序的文件通常分散在四个地方。理解这四个地方是排查"重装了还不行""删了怎么还在"的基础。
| 位置 | 打开方式 | 通常放什么 | 卸载/覆盖安装会不会清掉 |
|---|---|---|---|
| 安装目录 | 右键桌面图标 → 属性 → "打开文件所在的位置" | 主程序、更新器、下载器的可执行文件、运行库 | 卸载通常会删;覆盖安装只替换程序文件 |
%APPDATA% | Win + R,输入 %APPDATA%,回车 | 用户级配置、部分日志、登录状态 | 通常不会,这是"重装了还不行"最常见的原因 |
%LOCALAPPDATA% | Win + R,输入 %LOCALAPPDATA%,回车 | 缓存、WebView2 的用户数据、临时文件、日志 | 通常不会 |
%PROGRAMDATA% | Win + R,输入 %PROGRAMDATA%,回车 | 所有用户共享的数据:服务配置、驱动、反作弊组件 | 有的会有的不会 |
%APPDATA% 实际对应 C:\Users\用户名\AppData\Roaming,%LOCALAPPDATA% 对应 C:\Users\用户名\AppData\Local。AppData 是隐藏文件夹,用户直接在资源管理器里翻通常看不到,所以让用户用 Win + R 那个方法打开最省事。
待技术确认
平台客户端的安装目录默认值、%APPDATA% / %LOCALAPPDATA% / %PROGRAMDATA% 下对应的目录名、各类日志和配置的具体文件名,需与技术确认后填入 客户端。本页所有涉及"对应目录"的地方都以该页为准。
为什么客服要懂这些
用户说"我重装了三遍还是不行",是客户端类问题里最让新客服绝望的一句话。原因几乎总是:用户做的是覆盖安装,配置和缓存一直都在,问题的根源根本没被碰到。
同理,"更新到一半消失了""每次打开都说要更新""设置改了不保存""界面显示的是上周的活动"——这些看起来五花八门的问题,其实分别对应更新器、配置、缓存这几个部件。知道结构,就能把症状对到部件,再对到处理方法。
版本号
怎么看
| 方法 | 怎么做 | 适用 |
|---|---|---|
| 客户端内 | 通常在设置 / 关于 / 左下角角落 | 能打开客户端时 |
| 文件属性 | 右键桌面图标 → 属性 → "打开文件所在的位置" → 右键主程序 → 属性 → "详细信息"标签 → "文件版本" | 客户端打不开时 |
| 控制面板 | Win + R 输入 appwiz.cpl 回车 → 找到程序 → 右侧"版本"列 | 看安装记录里的版本 |
为什么版本不一致会出问题
- 客户端版本 vs 服务器要求版本:服务器可能拒绝老版本连接,表现为"登录失败""请更新""连接被拒绝"。
- 主程序版本 vs 附属组件版本:更新只更新了一半,反作弊或下载器还是旧的,表现为"初始化失败""校验失败"。
- 控制面板里的版本 vs 实际文件版本:说明有过不完整的更新或多版本共存。
让用户报版本号,是升级给技术时必备的信息之一。
更新机制
通用流程
- 增量更新:只下载变化的部分,小而快。
- 全量更新:整个程序重新下载,大但稳。增量失败几次后通常会退回全量。
自更新失败的典型表现
| 表现 | 大白话原因 | 排查方向 |
|---|---|---|
| 卡在"正在检查更新"不动 | 连不上更新服务器:网络、DNS、代理、防火墙 | 浏览器能不能开网页;关代理;登录与连接 |
| 下载进度条走到一半停住 | 下载源慢或断;磁盘满 | 看下载速度;看安装盘剩余空间 |
| 更新到一半窗口消失,再开又从头更新 | 替换文件时被拦截:安全软件把新文件隔离了,或权限不足写不进安装目录 | 看杀软隔离区;以管理员身份运行;安装目录是不是系统保护目录 |
| 反复提示要更新,更新完再开还提示 | 新版本号没写进去(配置写入失败);或有两个版本共存,打开的是旧的 | 看快捷方式指向哪;看配置目录权限 |
| 更新后显示的还是旧版本 | 同上 | 同上 |
| 提示"校验失败""文件损坏" | 下载的文件和服务器上的不一致:网络劫持、磁盘问题、杀软改了文件 | 换网络试;看磁盘;看杀软 |
注意
"更新到一半消失"和"程序运行中突然消失"很多时候是同一个原因:安全软件在删文件或结束进程。让用户先看安全软件的隔离区/拦截记录,见 安全软件与拦截。
下载器
客户端里下载几十 GB 游戏文件的那部分,是一个专门的下载器。了解它的几个概念,就能看懂下载类问题:
| 概念 | 大白话 | 对排查的意义 |
|---|---|---|
| 分块下载 | 把大文件切成很多小块,同时下好几块 | 一块坏了只重下那一块;速度看的是所有块的总和 |
| 断点续传 | 中途停了,下次从停的地方继续,不用从头来 | 用户关电脑再开不会白下;如果每次都从 0 开始,说明续传状态文件坏了 |
| 校验 | 下完后算一个"指纹"和服务器比,不一样就重下 | 校验失败 = 下下来的东西和服务器不一样,原因在网络或磁盘 |
| 限速 | 客户端设置里的下载速度上限 | 用户可能自己设过限速忘了 |
| CDN | 文件被复制到全国各地的服务器,就近下载 | 被分到远的节点会慢,见 DNS 与 CDN |
| P2P | 从其他正在下载的用户那里也拿一部分 | 有的下载器支持,会占上传带宽,可能被路由器或防火墙限制 |
待技术确认
平台下载器是否使用 P2P、是否支持限速、断点续传的状态文件放在哪、校验失败后的重试策略,需与技术确认后在 游戏文件与下载 补充。
下载目录选择的重要性
用户在安装时会选一个目录放游戏文件。这个选择决定了之后启动快慢、会不会校验失败、重装会不会丢文件。
| 选在哪 | 后果 |
|---|---|
| SSD | 理想 |
| 机械硬盘 | 下载和启动都慢,但能用 |
| 移动硬盘 / U 盘 | 慢;拔了就"游戏文件丢失";USB 2.0 接口上几乎不可用 |
| 网吧还原盘 | 重启就没了 |
| 剩余空间紧张的盘 | 下到一半空间满,校验失败 |
| 带中文、空格的路径 | 大部分程序能处理,但少数组件会出错 |
C 盘系统保护目录(Program Files 等) | 写入需要管理员权限,普通权限下校验/更新失败 |
缓存
是什么
程序为了下次更快,把已经拿过的东西暂存在本地:界面图片、活动页面、头像、临时文件。缓存的特点是删了不影响功能,程序会重新生成。
清缓存能解决什么
- 界面显示旧内容(活动页是上周的、头像没更新);
- 界面图片加载不出、显示错位、按钮点不动;
- 内嵌网页(客服、活动)白屏或报错。
清缓存不能解决什么
- 登录失败、连接失败(这是网络或账号问题);
- 下载慢(这是带宽或磁盘问题);
- 崩溃、闪退(这是程序、驱动或冲突问题);
- 反作弊报错。
大白话
缓存像浏览器的"历史记录和临时文件"。清掉它,网页会重新加载一遍,显示就对了;但如果网站本身打不开,清缓存没用。
清缓存通常在客户端设置里有按钮,没有的话就是删 %LOCALAPPDATA% 下对应目录里的 cache 类文件夹——这一步必须按 客户端 里确认过的路径做,不要让用户猜目录。
配置文件损坏的表现
| 表现 | 说明 |
|---|---|
| 每次打开都要重新选下载目录、重新登录 | 配置没保存成功:目录没写权限、被安全软件拦、磁盘满 |
| 某个设置改了不生效 | 配置文件被锁或损坏 |
| 启动直接报"配置错误""解析失败" | 配置文件内容坏了(断电、强制结束时正在写) |
| 界面语言、布局突然变了 | 配置被重置或被别的版本覆盖 |
| 覆盖安装后问题完全不变 | 因为配置根本没被动过 |
处理思路和 CS2 配置文件一样:重命名,不删除。改名后程序会生成一份全新的默认配置,如果问题消失就定位了;如果没消失就改回去。
覆盖安装 vs 卸载重装 vs 干净重装
这是客户端类问题里最重要的一个区分。
| 方式 | 做了什么 | 清掉了什么 | 没清掉什么 | 能解决什么 |
|---|---|---|---|---|
| 覆盖安装 | 在原目录再跑一遍安装包 | 替换了程序文件 | 配置、缓存、日志、注册表、服务、驱动 | 程序文件损坏、被杀软删了几个文件 |
| 卸载重装 | 控制面板卸载,再安装 | 程序文件、部分注册表、服务 | %APPDATA%、%LOCALAPPDATA% 里的配置和缓存通常保留,驱动和计划任务可能保留 | 上面的 + 服务/注册表类损坏 |
| 干净重装 | 卸载 + 手动清残留 + 重启 + 重装 | 全部 | 无(游戏文件本体可按需保留) | 配置污染、缓存损坏、残留冲突 |
注意
用户口中的"我重装了",十有八九是覆盖安装(直接再点一次安装包),偶尔是卸载重装,几乎从来不是干净重装。所以听到"重装了还不行",第一反应不该是"那就升级",而是问"你是怎么重装的"。真正的干净重装步骤见 干净重装。
残留
卸载一个程序后,可能留下这些东西:
| 残留类型 | 在哪 | 会造成什么 |
|---|---|---|
| 文件 | 安装目录、%APPDATA%、%LOCALAPPDATA%、%PROGRAMDATA% | 旧配置、旧缓存被新版本读到 |
| 注册表项 | 注册表里的程序设置、安装记录 | 安装程序以为"已安装"、版本号错乱 |
| 服务 | Windows 服务列表 | 旧服务还在跑或起不来,新版本注册服务失败 |
| 驱动 | 系统驱动目录 | 反作弊类驱动旧版本残留,与新版本冲突 |
| 计划任务 | 任务计划程序 | 定时跑的旧更新器还在跑 |
| 启动项 | 开机启动列表 | 开机自动跑一个已经不存在的程序,报错 |
| 防火墙规则 | Windows 防火墙 → 高级设置 | 旧规则指向旧路径,新版本被拦 |
| 快捷方式 | 桌面、开始菜单、任务栏 | 指向不存在或旧的程序 |
禁止
清残留涉及删文件、改注册表、删服务,全部是不可逆操作。本页只讲"残留有哪些",不讲怎么清。需要清的时候按 干净重装 的步骤和禁止清单做:只删名字确认属于该程序的目录、不动注册表、不用第三方"卸载工具"、不确定的一律改名不删。
快捷方式指向错误与多版本共存
用户桌面上的图标只是一个"指路牌",指向某个目录下的某个程序。常见问题:
| 情况 | 表现 | 怎么确认 |
|---|---|---|
| 指路牌指向的程序已被删除 | 双击提示"找不到项目""快捷方式已更改或移动" | 右键图标 → 属性 → 看"目标"路径是否存在 |
| 装过两次到不同目录,两个版本共存 | 更新了一个,打开的是另一个;版本号反复跳 | 属性里的目标路径 vs 控制面板里的安装位置 |
| 指路牌指向的是更新器而不是主程序(或反过来) | 打开就一直更新,或者跳过更新直接开 | 看目标文件名 |
| 任务栏固定的图标是旧路径 | 桌面图标能开,任务栏的不能 | 分别看两处属性 |
让用户看快捷方式属性的方法:
- "右键桌面上的客户端图标,选'属性'。"
- "弹出的窗口里有一行'目标',把整个窗口截图给我。"
- 需要时:"点下面的'打开文件所在的位置'按钮,把弹出的文件夹窗口截图给我。"
安装目录的建议
| 建议 | 原因 |
|---|---|
| 装在 SSD 上 | 启动、校验、更新都快 |
| 路径不含中文、空格 | 少数组件(尤其命令行工具、老运行库)处理不好 |
不装在 C:\Program Files、C:\Windows、C:\Users 以外的系统保护目录 | 普通权限写不进去,更新和校验失败 |
| 不装在桌面、下载文件夹里 | 用户容易误删、误移 |
| 不装在移动硬盘、U 盘 | 慢,拔了就丢 |
| 网吧不装在还原盘 | 重启就没 |
| 盘剩余空间至少比游戏文件大 20% | 更新需要临时空间 |
| 客户端和游戏文件可以分开放,但都要遵守以上规则 | 客户端小放哪都行,游戏文件几十 GB 一定要放对 |
一个安全的例子:D:\Games\R0\(客户端)和 D:\Games\R0Games\(游戏文件)。
以管理员身份运行
为什么需要
客户端要做几件普通权限做不了的事:写入安装目录(如果在保护目录下)、注册服务、加载反作弊驱动、修改防火墙规则。所以很多客户端必须以管理员身份运行,弹出 UAC 框("是否允许此应用对你的设备进行更改")是正常的。
副作用
| 副作用 | 表现 |
|---|---|
| 用户在 UAC 框点了"否" | 程序看起来"双击没反应",或启动了但反作弊初始化失败 |
| 管理员身份运行的程序,配置可能写到不同的位置 | 普通身份和管理员身份运行"设置不一样" |
| 拖放文件到管理员身份运行的窗口无效 | 用户说"拖不进去" |
| 网吧机器没有管理员权限 | 直接启动失败,见 网吧机器的特点 |
| 家庭版/受限账户 | 需要输入管理员密码 |
让用户以管理员身份运行一次的方法:"右键客户端图标,选'以管理员身份运行',如果弹出一个问'是否允许'的框,点'是'。"如果这样能开、双击不能开,说明就是权限问题——去快捷方式属性 → 兼容性 → 勾选"以管理员身份运行此程序",一次性解决。
首次运行与后续运行的差别
第一次运行和之后每次运行做的事不一样,很多"只有第一次不行"或"第一次好的后来不行"的问题就出在这个差别上。
| 阶段 | 首次运行会做 | 后续运行会做 |
|---|---|---|
| 运行时检查 | 检查并安装 VC++ 运行库、WebView2 等 | 跳过 |
| 服务/驱动注册 | 注册反作弊服务、安装驱动 | 只启动已注册的 |
| 配置 | 生成默认配置,引导用户选目录 | 读取已有配置 |
| 缓存 | 空,全部从网络拿 | 读缓存 |
| 防火墙 | 弹出"是否允许通过防火墙"框 | 已记录规则 |
| 安全软件 | 最容易在这一刻拦截(新程序、新驱动) | 已放行或已隔离 |
所以:第一次运行前,让杀软暂时不干扰(退出或加白名单),成功一次之后再恢复,是安装类问题的通用做法。而"第一次好的后来不行"要去看"这中间发生了什么":系统更新、杀软更新、用户装了别的软件。
进程消失的三类成因
用户说"客户端开着开着自己没了""游戏打到一半客户端不见了"。程序进程消失只有三类原因:
| 类型 | 大白话 | 典型证据 |
|---|---|---|
| 自身崩溃 | 程序自己出错退出 | 崩溃报错框;事件查看器"应用程序错误";客户端日志最后几行有 error/exception;生成了 dump 文件 |
| 被别的程序结束 | 有另一个程序把它杀掉了 | 没有任何报错、悄无声息;安全软件有拦截/隔离记录;网吧环境;事件查看器没有崩溃记录 |
| 系统层面 | 整个系统在关机、注销、蓝屏 | 不止客户端,其他程序也没了;系统重启了;事件查看器有系统级事件 |
区分方法和平台客户端的具体情况见 客户端,事件查看器用法见 资源监视器与事件查看器。
大白话
一个人从房间里不见了,只有三种可能:自己走出去了(崩溃)、被人拖出去了(被结束)、整栋楼被清空了(系统层面)。看现场留下的痕迹(报错框、日志、事件查看器)就能判断是哪种。
常见误区
- "用户说重装了,那就不是安装的问题了。" 十有八九是覆盖安装,配置缓存全没动。问清楚他怎么重装的。
- "清缓存万能。" 清缓存只解决"显示不对"这一类,对登录、下载、崩溃基本无效。
- "版本号不重要。" 服务器拒绝老版本、组件版本不一致,都是版本问题。升级时必带。
- "更新卡住就重启电脑。" 先看是卡在检查(网络)还是卡在下载(带宽/磁盘)还是卡在替换(杀软/权限),三种处理完全不同。
- "装哪都一样。" 装在 U 盘、还原盘、系统保护目录、剩余空间不够的盘上,各有各的死法。
- "程序不见了肯定是崩溃。" 没有任何报错悄悄消失的,更像被结束。看安全软件记录。
对排查意味着什么
客户端层问题的判断顺序:
- 问怎么装的、装在哪、版本多少——这三个问题能排除一半嫌疑。
- 看症状对应哪个部件:更新器 / 下载器 / 配置 / 缓存 / 运行时 / 附属组件。
- 按部件用对应的方法:更新卡 → 看网络和杀软;下载慢 → 看带宽和磁盘;显示不对 → 清缓存;设置不保存 → 看配置目录权限;界面空白 → 看 WebView2(浏览器与 WebView2)。
- 确认是安装损坏或残留时,才走 干净重装。
- 进程消失,先分三类,再对应到安全软件(安全软件与拦截)或事件查看器。
对应的排查方案页:
自检问题
- 启动器类软件通常由哪几部分组成?用户说"界面显示的活动是上周的",对应哪个部件?
%APPDATA%、%LOCALAPPDATA%、%PROGRAMDATA%分别放什么?让用户打开%APPDATA%的小白说法是什么?- 覆盖安装、卸载重装、干净重装的区别是什么?为什么"重装了还不行"往往是覆盖安装?
- 更新"卡在检查""卡在下载""更新到一半消失"分别指向什么原因?
- 清缓存能解决哪类问题、不能解决哪类问题?
- 进程消失的三类成因是什么?分别用什么证据区分?