hanfuit
|
0897761c47
|
docs:补充 18112 进程判读与 serve.py 需重启的规则
起因:同步 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 进程重启」的部署动作
|
2026-11-05 19:38:32 +08:00 |
|
hanfuit
|
adcc5b0f3a
|
docs:新增踩坑记录,13 条坑的成因复盘与判断规则
和「排查记录」不同,这份文档不写怎么修,只回答「为什么会踩、为什么没早发现」,
给的是可迁移的判断,而不是单次操作步骤。
- P-001 启动器套娃开窗:三层成因(打包改变 sys.executable 语义 / Popen 只保证
进程创建不保证脚本执行 / 端口顺延把必然失败伪装成正常启动)、四个掩盖因素、
四个不成立的隐含假设,以及「拉起子进程要校验副作用而非返回值」等五条教训
- P-002~P-013:DLL 指纹绑定、CRC32 种子、CRC 槽位扫错节、CSS 特异性、IE11、
旧进程占端口、WebView2 缓存、console=False、图片占位时序、仓库与部署副本、
replace 静默失败、补丁包缺文件
- 结尾提炼八条通用规则与发版检查清单
- 文档索引:根 README、docs/README 各补一行;排查文档顶部加成因复盘的交叉链接
|
2026-11-05 17:27:47 +08:00 |
|
hanfuit
|
c6587d88ee
|
启动器:修复打包后自我套娃开窗,补运行日志与排查文档
根因:start_gmweb() 用 sys.executable 拉起 gmweb/serve.py,源码运行时是
python.exe,PyInstaller 单文件打包后却是启动器自身 —— 于是 `exe serve.py`
又开了一个启动器,新启动器再去拉 serve.py,每代顺延一个端口并各开一个
空窗口,直到 19546 端口用尽。开发机因为 18112 早被占用走了 early return,
所以看不出来。
- 新增多调用模式 run_script_instead():exe <xxx.py> [args] 时用 runpy 直接
执行该脚本,不开窗口/不提权/不占互斥量,打包后拉起 serve.py 才合法
- 新增单实例互斥(Local\DNF90Launcher-5E9C1B7A):重复启动把已有窗口
ShowWindow+SetForegroundWindow 后退出,不再开第二个窗口
- start_gmweb() 增加就绪校验:spawn 后最多等 6 秒确认 18112 在监听,未监听
则改用 importlib 在本进程线程里跑 serve.py 的 main(),绝不再拉起新窗口
- self_elevate() 提权重启带上原始参数(原来 ShellExecuteW 传 None,参数全丢);
DNF90_GMWEB_CHILD=1 的子进程不再触发 UAC
- WebView2 数据目录固定到 %LOCALAPPDATA%\DNF90Launcher\WebView2 且
private_mode=False,避免 exe 在只读目录/网络盘时窗口空白且无报错;
启动前查注册表确认运行时是否存在
- 新增 启动器日志.txt(exe 同目录,512KB 转 .old.txt):console=False 下
print 与未捕获异常全部落盘,顶部记录 pid/argv/SERVER_ROOT
- 文档:新增 docs/启动器窗口风暴排查.md(现象、根因、复现手法、修复点、
日志判读表),README 常见坑与文档索引、docs/README、launcher/README 同步
|
2026-11-05 17:22:51 +08:00 |
|