Repository navigation
v1.0.5 —— 「点了没反应」的开关全修好 · 一键启动 62 秒 → 秒级
v1.0.5 —— 「点了没反应」的那几个开关全修好了 · 一键启动 62 秒 → 秒级
这一版全是实测反馈驱动的修复,线索是同一条:点了没反应 / 关不掉 / 开了回不来。
下面每一条都对应一次真实报障。
一、启动页的「乳摇物理效果」「摆姿 / MMD 播放」开关关不掉
点下去日志里能看到后端真的卸了,界面却立刻弹回「已开启」,下次启动又装回来。
原因:开关的动作确实执行了,但没把新状态写回配置;而前端拨完开关会重新读一遍配置
(loadSettings()),后端自检也是按配置决定要不要注入 ⇒ 配置里的旧值把界面和下次启动
一起拽了回去。
现在:开关动作与配置一起落地(只有"确实动过手"才写),前端见到后端回传的配置就不再回滚。
二、关掉管理器之后再打开:弹完 UAC 就没反应了
原因:防多开只判断"锁文件里那个进程号还活着"。Windows 会很快复用进程号,而单文件
exe 每次启动会产生两个同名进程(引导父进程 + 真正的子进程)⇒ 旧进程号极易被本次启动的
进程占用 ⇒ 永久误判成"已经在运行",于是这次启动直接静默退出。
现在:判据改成三件套 —— 进程号活着 且(进程指纹(exe 路径 + 创建时间)对得上 或
屏幕上真的有我们的窗口)才算"已在运行",否则接管;真被占用时会把那个窗口拉到最前面,
不再让用户对着"没反应"发呆。
三、「更改所属角色」点了没反应
原因(用 WebView2 的远程调试端口抓到的真实异常):服装 Mod 页的模板里写了归类对话框,
但从来没有 import 它 —— Vue 会把未识别的标签当成"未知元素"静默跳过:弹窗永远不出现,
而代码里去调它的方法直接 TypeError,又被一个空的 catch 吞掉,所以表面上"什么都没发生"。
同一页还漏了一个角标组件,导致「皮肤 Mod 总开关」的角标一直不显示。
现在:组件补齐,catch 里一律写日志 + 弹窗(不许静默),并加了两条静态回归测试钉住这类问题
(模板里用到的组件必须 import;模板里传的动作名必须有分支)。
四、Poser 关了之后再点,就再也打不开了(挖了三层)
- 开关守卫拦住了显式指令 —— 用户主动点"开"也被当成"配置里是关的,不用装";
- 改成强制后变成每次都重新下载整个安装包;
- 真因:关掉「乳摇」时,程序看不到"停用中"的 Poser 插件,于是判定"没有别的插件了",
把游戏目录里两个共享的引导文件还原回了系统原版 ⇒ Poser 的底座没了;这时再跑上游安装向导,
向导看见那个系统原版文件会直接拒绝干活。
现在:① 本地安装包在位就不下载;② 缺引导文件时由程序自己按同一套规则补齐
(备份原版 + 放上包里的版本),不再去麻烦那个会拒绝的上游向导;③ 「停用中」的插件
也算"还在用",任何一方的卸载/还原都要先问一句"还有别人在用吗"。
五、一键启动从 62 秒降到秒级
原因:关掉「自动更新依赖」之后,只有一个组件尊重这个开关,另外三个(Libraries / EFMI / Poser)
照样联网——其中 Poser 一步就静默下载了 54 秒,界面上只显示一行 checking。
现在:关着「自动更新依赖」且本地已就位时,一个网络请求都不发,启动日志里会明确写
「本地已就位…跳过联网检查」;需要更新时由用户在依赖页显式点。
六、其它
- 「归类」弹窗在两个入口(服装页 / 辅助页)都打通;
- 关闭再打开时,锁文件会被正常释放(含强制退出路径)。
测试:tests 630 passed(新增开关落配置、单实例、前端组件/动作名、记忆日志等回归)。