From 0897761c473eaaec71f4f590c25cec95de875ec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=B5=E5=AE=9D=E4=BB=99=E5=B0=8A?= Date: Thu, 5 Nov 2026 19:38:32 +0800 Subject: [PATCH] =?UTF-8?q?docs=EF=BC=9A=E8=A1=A5=E5=85=85=2018112=20?= =?UTF-8?q?=E8=BF=9B=E7=A8=8B=E5=88=A4=E8=AF=BB=E4=B8=8E=20serve.py=20?= =?UTF-8?q?=E9=9C=80=E9=87=8D=E5=90=AF=E7=9A=84=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 起因:同步 gmweb 时看到 18112 被占,先判断成「启动器在跑」、又改口成「残留 pythonw serve.py」,两次都错 —— 实际是多调用模式下的 gmweb 子进程,进程名就叫 DNF90启动器.exe。 - 排查文档新增小节「18112 上跑的可能是启动器本身」:给出命令行三态判别表 (带 serve.py 参数 = gmweb 服务 / 只有 exe 路径且占 19527 = 主进程 / 父 pid 不存在 = 遗留服务),并附 Get-CimInstance 取证命令 - 明确推论:该进程跑的是启动那一刻的 serve.py;静态文件读盘即生效, 但路由不会,症状是「页面新版、接口旧版,按钮点了没反应」 - AGENTS.md 8.3 同步补上「改 serve.py 后必须让 18112 进程重启」的部署动作 --- AGENTS.md | 5 +++++ docs/启动器窗口风暴排查.md | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 7d2c5ca..0e94193 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -263,6 +263,11 @@ git push origin main # ③ 推 仓库改了,`Z:\90server` 和桌面补丁包**还是旧的**(见 R3)。凡是改了 `gmweb/`、启动器或客户端的提交, 推完要:同步部署副本 → `diff -rq` 核对 → 该重打包的重打包 → 通知实际在玩的人重启启动器。 +**改 `serve.py` 尤其要注意**:静态文件(`index.html` / `loadout.js` / `.css`)每次请求读盘、替换即生效, +但 `serve.py` 的路由是**进程启动时注册**的。抓 18112 的那个进程(进程名可能就叫 `DNF90启动器.exe`, +看命令行有没有 `serve.py --port 18112`)不重启,就会出现「页面是新版、接口是旧版」—— +按钮点着没反应,最难查。所以:同步完先看 18112 是谁在听,该关就关,再重新打开启动器。 + > 真实案例:`cc54603` 推了 gmweb 一键换装,但部署目录没同步,游戏里看不到新功能; > 同时 18112 被一个残留 `serve.py` 占着,启动器看到端口已占用就跳过启动, > 于是「改了、推了、也重启了,还是旧页面」(见 P-007、P-008)。 diff --git a/docs/启动器窗口风暴排查.md b/docs/启动器窗口风暴排查.md index 5279895..6e9ff31 100644 --- a/docs/启动器窗口风暴排查.md +++ b/docs/启动器窗口风暴排查.md @@ -121,6 +121,35 @@ DNF90启动器.exe probe.py # 旧版:hit.txt 不生成,却开出一个 | `警告:注册表里没查到 WebView2 运行时` | 机器缺 Edge WebView2 Runtime,装一下即可(窗口会是空白) | | 完全没有日志文件 | exe 所在目录不可写(如 Program Files),换目录或给写权限 | +### 18112 上跑的可能是「启动器」本身,别被进程名骗了 + +多调用模式的代价:gmweb 子进程的**进程名就是 `DNF90启动器.exe`**,真实身份只在命令行里。 + +``` +DNF90启动器.exe Z:\90server\gmweb\serve.py --port 18112 +``` + +实际踩过:看到 18112 被占、进程名是启动器,先判断成「启动器在跑」,又找不到窗口可点 +(父进程早退了、只剩这个子进程),于是改口成「残留的 `pythonw serve.py`」——两次都错了。 +**名字不可靠,看命令行**: + +```powershell +Get-CimInstance Win32_Process | Where-Object { $_.ProcessId -eq } | + Select-Object Name,ProcessId,ParentProcessId,CommandLine | Format-List +``` + +| 命令行特征 | 身份 | +|---|---| +| 带 `...\gmweb\serve.py --port 18112` | gmweb 服务进程(正常形态,父进程通常就是启动器) | +| 只有 exe 路径,且自己占着 `19527` | 启动器主进程 | +| 上面那条的 `ParentProcessId` 已不存在 | 父启动器退了,留下的是**遗留 gmweb 服务**(能继续用,但跑的是旧代码) | + +> **关键推论:它跑的是「启动那一刻」的 `serve.py`。** +> 静态文件(`index.html` / `loadout.js` / `.css`)每次请求都读盘,替换后立即生效; +> 但 `serve.py` 的路由是进程启动时注册的,**替换文件不会生效**。 +> 症状是「页面是新版(按钮都在),接口却是旧版(点了没反应 / 404)」。 +> 所以同步过 `gmweb/` 之后,必须让占着 18112 的进程重启一次(关启动器 → 确认端口空了 → 重新打开)。 + ## 七、相关坑(顺带记录) - **exe 名字带中文**没问题,日志和 WebView2 目录都能正常处理;但 exe 放在**只读目录**会让日志与 WebView2 同时失效,表现就是「能开窗口但空白、也没有日志」。