WPS 开机自启动排查与根治全记录
适用环境:Windows 11 Pro (26300) / WPS Office 12.1.0.20305(32 位,用户级安装)
排查日期:2026-08-13
关键词:WPS自启、wpscloudsvr、ksolaunch、qingnse64.dll、explorer COM 扩展、火绒自定义防护、4688 进程审计、Private Bytes vs 工作集
一、问题现象
- WPS 每次开机后后台自动启动:
wpscloudsvr.exe(云服务)→ wps.exe ×3 → promecefpluginhost.exe(CEF 渲染)×2。
- 禁用服务、禁用任务管理器启动项、删除 Run 键均无效,重启后依旧自启。
- 禁用的计划任务(
WpsUpdateLogonTask、WpsUpdateTask)会被 WPS 自愈机制”复活”。
- 内存占用在两个工具中显示差异巨大:System Informer 显示 700+ MB,任务管理器仅 14~40 MB。
二、最终结论(一句话)
真正的自启动入口是 explorer.exe 通过 COM(Shell 扩展)加载 qingnse64.dll,该 DLL 初始化时立即执行 WPS 总启动器 ksolaunch.exe,再由 ksolaunch 拉起 wpscloudsvr.exe 全家桶。 所有常规入口(Run 键、启动文件夹、服务、计划任务)都是障眼法或会被自愈。
完整启动链(4688 审计实锤)
1 2 3 4 5 6 7 8
| 登录 → userinit.exe → explorer.exe(启动后 ~2.9 秒) └─ explorer 加载 qingnse64.dll(COM Shell 扩展) └─ 执行 ksolaunch.exe(/qingbangong /start_from=qingnseinit /broadcast silentautologin) └─ 执行 wpscloudsvr.exe ├─ wps.exe(主程序,常驻 3 个) │ └─ promecefpluginhost.exe(CEF 渲染进程 ×2) └─ kwinappinstaller.exe(自愈/安装组件) └─ 重新注册被禁用的计划任务(自愈机制)
|
三、排查方法(可复用的标准流程)
1. 进程树与命令行
1 2
| Get-CimInstance Win32_Process | Where-Object { $_.Name -match 'wps' } | Select Name, ProcessId, ParentProcessId, CreationDate, CommandLine
|
关键点:wpscloudsvr 命令行含 /start_from=qingnseinit —— “qingnse” 模块初始化,指向隐藏入口方向。
2. 全量启动项排查(这些位置都要查)
| 位置 |
命令 |
本例结果 |
| HKCU/HKLM Run |
Get-ItemProperty 'HKCU:\...\Run' |
无 WPS |
| RunOnce / RunServices / Policies\Explorer\Run |
reg query |
无 |
| 32 位 Run(WOW6432Node) |
reg query |
无 |
| 启动文件夹 |
$env:APPDATA\...\Startup |
空 |
| 计划任务 |
Get-ScheduledTask 按 Execute/Arguments 匹配 |
3 个 WPS 任务 |
| 服务 |
Get-CimInstance Win32_Service 按 Name/PathName 匹配 |
旧版 wpscloudsvr(指向 Program Files (x86)) |
| 驱动 |
Get-CimInstance Win32_SystemDriver |
无 |
| AppInit_DLLs / ShellExecuteHooks / SharedTaskScheduler |
注册表 |
干净 |
| WMI 事件订阅 |
root\subscription |
干净 |
| Winlogon Userinit/Shell |
注册表 |
干净 |
3. 终极手段:4688 进程创建审计(必杀技)
1 2 3 4
| auditpol /set /subcategory:"进程创建" /success:enable
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4688; StartTime=$boot} | ForEach-Object { $m=$_.Message; if($m -match 'ksolaunch'){ $m } }
|
实例(本机实锤输出):
1 2 3 4
| 16:50:50.331 新进程: ksolaunch.exe (PID 15512) 创建者: explorer.exe (PID 6224) 16:50:50.434 新进程: ksolaunch.exe (PID 15916) 创建者: explorer.exe (PID 6224) 16:50:50.892 新进程: wpscloudsvr.exe (PID 16680) 创建者: ksolaunch.exe (PID 15512) 16:50:53.741 新进程: wps.exe (PID 19344) 创建者: wpscloudsvr.exe (PID 16708)
|
4. 关键洞察:explorer 加载的模块
1 2
| (Get-Process explorer).Modules | Where-Object { $_.ModuleName -match 'qingnse|kingsoft' }
|
配套:reg query 'HKLM\SOFTWARE' /f qingnse /s /d 可搜出全部注册的 CLSID(本机 HKLM/HKCU/WOW6432Node 三处共十余个)。
四、为什么”禁用一切”都没用
- 入口不在服务/启动项:explorer 通过 COM 注册(
HKLM\SOFTWARE\Classes\CLSID\... 指向 qingnse64.dll)加载 DLL,DLL 自己执行 ksolaunch,与 Run 键/服务/任务无关。
- 禁用的服务是旧版残留:服务
wpscloudsvr 指向 C:\Program Files (x86)\Kingsoft(旧版 WPS 11),实际运行的是 AppData 新版,两者无关。
- 计划任务自愈:WPS 运行后重新注册被禁用的任务(”死而复生”)。
- 火绒也拦不住开机自启:explorer 启动后 ~2.9 秒就执行 ksolaunch,早于火绒自定义防护就绪 —— 固定的开机竞态窗口(本机 16:39/16:48/16:55 三次运行期尝试全被拦,唯独开机早期漏)。
五、根治方案(按效果排序)
方案 A(本次采用,最有效):改名 qingnse64.dll
1
| Rename-Item '...\office6\qingnse64.dll' 'qingnse64.dll.disabled'
|
- 原理:WPS 为 32 位版,主程序(wps.exe)用 32 位
qingnse.dll;只有 64 位 explorer 加载 qingnse64.dll。改名后 explorer 加载失败 → 不执行 ksolaunch → 无竞态。
- 影响:手动打开/编辑 WPS 文档不受影响;仅资源管理器右键”轻办公/云”菜单失效。
- 可逆:改名回来即可。注意 WPS 更新/自愈可能重新生成该 DLL,复发时再改名一次。
导出备份 .reg 后删除 HKLM+HKCU 中指向 qingnse64.dll 的 CLSID 键。WPS 可能自愈重新注册,需配合方案 A 才彻底。
方案 C:火绒自定义防护(辅助防线)
规则:保护文件 ksolaunch.exe + wpscloudsvr.exe,发起程序 *,操作「禁止执行」。
- 运行期有效(本机验证 100% 拦截 explorer→ksolaunch 和 wpscloudsvr→ksolaunch 守护动作)
- 仅开机早期存在竞态漏网,故必须配合方案 A。
辅助操作
1 2 3 4 5
| Disable-ScheduledTask -TaskName 'WpsUpdateLogonTask_Administrator','WpsUpdateTask_Administrator','WpsWakeWnsLogonTask'
Set-Service -Name 'wpscloudsvr' -StartupType Disabled
|
六、内存”虚假显示”真相(口径差异)
| 指标 |
实测值 |
含义 |
| 工作集 Working Set |
26 MB |
真实物理驻留 |
| 私有字节 Private Bytes |
754 MB |
虚拟内存提交量(含换出/未触达页) |
- 任务管理器「内存」列 = 私有工作集(物理)→ 显示 14~40 MB
- System Informer 默认「内存」列 = Private Bytes(提交量)→ 显示 700+ MB
- 两者都是真实的,只是统计口径不同,不是虚假显示;754 MB 提交不等于 754 MB 物理占用。
七、经验教训
- 杀不掉的自启动 → 先看 explorer 加载了什么模块。DLL 注入式自启是”禁服务/删启动项”的死角。
- 进程命令行里的特殊参数是突破口(本例
/start_from=qingnseinit 直接指向模块名)。
- 4688 进程审计是终极取证工具:一次重启拿到完整父子链,不再靠猜。
- 火绒自定义防护有开机竞态:拦截在登录早期不可靠,根治要靠源头(禁用 DLL/COM)。
- 区分 x86/x64 组件:32 位软件可能同时带 32/64 位两个 DLL,只改影响目标进程的那个,副作用最小。
- 同类软件排查可复用:QQ/网易/金山系产品的”云服务常驻”多采用同样手法(explorer COM 扩展 + 启动器守护 + 任务自愈)。