weasel
weasel copied to clipboard
WeaselServer.exe 会随机自己崩溃,Exit code [3221225477],大概每天一次
上报前请检查
- [ * ] 我遇到的问题没有其他人在 issue 里提到过
- [ ] 我的小狼毫版本于 rime/weasel 下载
- [ * ] 我在使用小狼毫的最新发布版本,或最新发布版本后的 CI 构建
操作系统信息
- Windows 11 23H2 22631.3007
描述遇到的问题 因为会崩溃,就写了个Windows服务监控 WeaselServer.exe,崩溃后调用 GetExitCodeProcess检查,得到 Exit code [3221225477]
复现步骤 重现问题的步骤,如:
- 几乎都发生在,英文模式下打字,就可能突然崩了,不怎么频繁,大概一天一次,重启服务后大概就正常了
用户文件 data.zip
经过多次测试,是在我启动一个python脚本时,有很大概率崩溃,如果切换到 【windows的英文输入法】 启动脚本,WeaselServer.exe就不会崩溃,切换回 Weasel的英文模式,在控制台启动 python 脚本,Exit Code 不限于 [3221225477],包括
[1073807364] [2次] [3221226356] [5次] [3221225477] [12次]
python脚本包括同时 playwright 打开网页,读取本地大文件,大量运算,如果单独留下 playwright ,不运算,或者去掉 playwright ,只执行运算,WeaselServer.exe 好像都不容易崩溃
能否考虑给 WeaselServer.exe 加个守护进程,崩溃后自动重新启动,我尝试在Windows服务里调用 CreateProcessAsUser,来启动WeaselServer.exe,不过它好像马上就死了,CreateProcessAsUser 启动 WeaselDeloyer.exe /dict 倒是可以成功看到窗口出现
我这个版本加了类似守护的功能(64位),可手动关闭。TSF端检测服务端无响应时就启动「算法服务」。
我这个版本加了类似守护的功能(64位),可手动关闭。TSF端检测服务端无响应时就启动「算法服务」。
好主意,上次参考你的代码改了个64位,现在再看看怎么检测无响应的,你是写在LanguageBar.cpp里面的吗
我这个版本加了类似守护的功能(64位),可手动关闭。TSF端检测服务端无响应时就启动「算法服务」。
好主意,上次参考你的代码改了个64位,现在再看看怎么检测无响应的,你是写在LanguageBar.cpp里面的吗
在WeaselTSF::_EnsureServerConnected里
我这个版本加了类似守护的功能(64位),可手动关闭。TSF端检测服务端无响应时就启动「算法服务」。
好主意,上次参考你的代码改了个64位,现在再看看怎么检测无响应的,你是写在LanguageBar.cpp里面的吗
在WeaselTSF::_EnsureServerConnected里
这里好像有按键才会触发检测,我弄了个线程循环检查,不过TSF会在每个窗口都生成,导致我的线程也有好多个,不过还好多个线程重复启动 WeaselServer.exe 问题不大
@ccyybn 是的。当你没有输入时,算法服务是否运行无关紧要。这个逻辑可确保输入不会中断。
@ccyybn 是的。当你没有输入时,算法服务是否运行无关紧要。这个逻辑可确保输入不会中断。
有一点可以优化一下,重启服务后把 TSF当前的中英文状态,恢复到服务里,这样用户就完全没有感知了
不过一些方案自定义Option (简繁,emoji开关),就有点不方便,由于TSF里面并没有记录状态值,导致每项都要硬编码一下,才能同步到TSF里面
可以看看nightly build,或者更新rime.dll到最新版测试看看情况
可以看看nightly build,或者更新rime.dll到最新版测试看看情况
还是会崩,我觉得是 playwright 爬虫启动了网页,在网页里的输入框触发了输入法,然后不知怎么的输入法就崩了
不过现在我加了崩溃后重启 和 重启后各个程序的TSF恢复自己的中英文,简繁体些状态,就使用上已经没影响了
3221225477对应为0xc0000005, 我之前试处理ITfThreadFocsSink 的时候试出来的状态是 nullptr referenced
最近有两个commit做了一点处理,可能可以消除一部分问题,nightly可以试试 @ccyybn
2b9d96868b28670e3394679bdc1e4e211e7bdf0f 952ad12035cfd47e9cad5e60ad577a6a04e0cab3
3221225477对应为0xc0000005, 我之前试处理ITfThreadFocsSink 的时候试出来的状态是 nullptr referenced
最近有两个commit做了一点处理,可能可以消除一部分问题,nightly可以试试 @ccyybn
我感觉似乎是由于两个进程同时使用输入法,就会崩溃,日常使用一般不会有这种同时使用的情况,但是当有自动程序也在调用输入法时,就容易出问题
新版的崩溃概率是要低一些了,当我在执行脚本时,不打字,就很难崩溃了,之前是 playwright 和 执行playwright的命令行这两个进程都会触发崩溃,现在执行脚本时,要再加上我故意在记事本里打字,才容易出现打字卡死崩掉的情况
https://github.com/fxliang/weasel/actions/runs/9109244341 改了一点东西,减少一点不必要的服务端ui更新,有可能再避免一点问题 @ccyybn