ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

小狼毫输入法候选框无法拉起

小狼毫输入法候选框无法拉起 从某一天起小狼毫输入法的候选框突然无法拉起了此前一直排查无果。近期重装 Windows 系统后同一台电脑上管理员账户的小狼毫可以正常弹出候选框新建的本地账户却不行。切到小狼毫打字时弹出来的是「是否检查更新」候选框始终不出现。表面看像是配置没拷过去或者更新弹窗挡住了界面。实际是两层问题叠在一起这个用户的输入法列表里一开始没有小狼毫补上之后小狼毫进程又在加载旧词库时崩溃于是每次按键都把进程拉起来更新询问就反复出现。帖主的问题最终借助 Cursor 得以修复下附 Cursor 总结的具体的问题表现、排查过程及结论供有需要的同仁参考。环境项目版本或路径系统Windows 10 22H219045小狼毫0.17.4librime1.13.1rime.dll安装目录C:\Program Files\Rime\weasel-0.17.4用户数据%APPDATA%\Rime即C:\Users\用户名\AppData\Roaming\Rime账户管理员账户正常本地账户的用户目录是重装前用 robocopy 放回去的小狼毫是全机安装词库和皮肤在每个用户自己的%APPDATA%\Rime。重装后如果把旧的Rime目录原样拷回来配置文件可以看起来完整编译好的二进制词库却可能是上一版 librime 留下的。现象管理员账户切换到小狼毫候选框正常。本地账户切换到小狼毫打字没有候选框。把小狼毫加进这个账户之后再试一打字就弹出「是否检查更新」候选框仍然没有。排查1. 先对比两边的用户配置小狼毫的用户配置在%APPDATA%\Rime。两边都有这些文件default.custom.yaml输入方案列表weasel.custom.yaml外观配色都是lunauser.yamlinstallation.yamlbuild\weasel.yaml展开后的界面参数build\weasel.yaml里和候选框直接相关的几项也一致字体是微软雅黑horizontal: falseinline_preedit: falsecolor_scheme: luna。外观配置可以排除。本地账户这边还多了重装前的用户词库*.userdb、opencc和sync。这些先留着没有用管理员那份较空的目录覆盖。2. 输入法列表并不是同一份小狼毫的 TSF 注册在本机不在某个用户目录里CLSID {A3F4CDED-B1E9-41EE-9CA6-7B4D0DE6CB0A} Profile {3D02CAB6-2B8E-4781-BA20-1C9267529467} 图标 C:\Windows\system32\weasel.dll它挂在语言0x00000404中文繁体下面不在简体中文0x00000804下面。这是小狼毫一直以来的注册方式语言栏里要切到「中文繁体」才能用到它。管理员账户的语言列表是zh-Hans-CN微软拼音zh-Hant-TW小狼毫对应注册表HKCU\Control Panel\International\User Profile Languages zh-Hans-CN, zh-Hant-TW HKCU\Control Panel\International\User Profile\zh-Hant-TW 0404:{A3F4CDED-B1E9-41EE-9CA6-7B4D0DE6CB0A}{3D02CAB6-2B8E-4781-BA20-1C9267529467} 1 HKCU\Keyboard Layout\Preload 1 00000804 2 00000404本地账户当时只有zh-Hans-CN。程序虽然装在Program Files里这个用户的输入法列表里并没有小狼毫所以不会出现小狼毫自己的候选框。给本地账户补上与管理员相同的繁体中文项并写上HKCU\Software\Rime\Weasel RimeUserDir C:\Users\用户名\AppData\Roaming\Rime Hant 1这一步只解决「列表里没有小狼毫」。注销再登录后更新弹窗出现了候选框还是没有。3. 更新弹窗是崩溃重启带出来的「是否检查更新」来自小狼毫自带的 WinSparkle注册表在HKCU\Software\Rime\Weasel\Updates管理员账户里已经有DidRunOnce 1 CheckForUpdates 0 LastCheckTime 1790584083本地账户里只有DidRunOnce 1没有CheckForUpdates。WinSparkle 会在进程启动时询问要不要自动检查更新。这个对话框跑在WeaselServer.exe的界面线程上对话框还在候选框就不会画出来。但弹窗只是伴随现象。应用程序日志里WeaselServer.exe在短时间内连续崩溃错误应用程序名称: WeaselServer.exe版本: 0.17.4.0 错误模块名称: rime.dll版本: 1.13.1.0 异常代码: 0xc0000409 错误偏移量: 0x0000000000232acc 事件名称: BEX640xc0000409是STATUS_STACK_BUFFER_OVERRUN。输入法每次激活都会再把WeaselServer.exe拉起来于是形成循环启动、弹出更新询问、在rime.dll里崩溃、下次按键再启动。当时任务管理器里只有管理员会话的WeaselServer.exe。本地账户那次登录留下的进程已经退出。4. 日志停在旧的 table.bin崩溃前的日志在%TEMP%\rime.weasel\rime.weasel.计算机名.用户名.log.INFO.* %TEMP%\rime.weasel\rime.weasel.计算机名.用户名.log.ERROR.*INFO 日志里的加载顺序是jyut6ping3.table.bin、luna_pinyin.table.bin能打开。这两份的修改时间是重装当天。接着加载loengfan、stroke。开始读cangjie5.table.bin时进程消失日志后半被截断。ERROR 日志里还有一条但它不是崩溃点simplifier.cc:45] opencc config not found: C:\Program Files\Rime\weasel-0.17.4\data\opencc\emoji_cantonese.json这是方案里引用了共享数据目录没有的 OpenCC 配置librime 记下错误后还会继续跑。管理员账户使用同一套方案时也会走到类似逻辑却不崩溃。把build目录里文件的修改时间摊开看问题就清楚了文件本地账户崩溃时管理员账户正常jyut6ping3.table.bin重装当天已重新编译重装当天luna_pinyin.table.bin重装当天已重新编译重装当天loengfan.table.bin2025-11-21备份里的旧文件重装当天stroke.table.bin2025-11-21重装当天cangjie5.table.bin2025-11-21重装当天对应的*.prism.bin不少已在重装当天重新生成重装当天旧的table.bin是 robocopy 按数据时间/COPY:DAT放回去的所以时间戳仍是 2025 年。重装后的小狼毫 0.17.4 做了一次不完整的重新部署棱镜prism.bin和部分词库换成了新的仓颉、两分、笔画的table.bin仍是上一版 librime 的产物。新的rime.dll去读这份旧表在cangjie5.table.bin上缓冲区检查失败进程直接退出。用户词库*.userdb在这次日志里还没加载到不是崩溃原因不必删。原因两件事先后挡住了候选框。小狼毫注册在繁体中文输入法下。只给新用户装了软件、只恢复了%APPDATA%\Rime语言列表里如果没有「中文繁体」这一项候选框不会出现。恢复出来的build\*.table.bin与小狼毫 0.17.4 自带的rime.dll不是同一代。不完整部署让新旧二进制混在同一个build目录里。WeaselServer.exe一加载旧表就崩溃崩溃重启又碰上 WinSparkle 的首次更新询问所以用户看到的是更新对话框而不是候选框。修复下面的路径按实际用户替换。修改的是那个出问题的用户的HKCU该用户需要处于已登录状态切换用户后注册表配置单元仍加载改完后注销再登录。1. 把小狼毫加进该用户的输入法列表语言列表同时保留原来的简体中文HKCU\Control Panel\International\User Profile Languages zh-Hans-CN, zh-Hant-TW HKCU\Control Panel\International\User Profile\zh-Hant-TW 0404:{A3F4CDED-B1E9-41EE-9CA6-7B4D0DE6CB0A}{3D02CAB6-2B8E-4781-BA20-1C9267529467} 1 HKCU\Keyboard Layout\Preload 1 00000804 2 00000404 HKCU\Software\Microsoft\CTF\SortOrder\Language 00000000 00000804 00000001 00000404 HKCU\Software\Microsoft\CTF\SortOrder\AssemblyItem\0x00000404\{34745C63-B2F0-4784-8B67-5E12C8701A31}\00000000 CLSID {A3F4CDED-B1E9-41EE-9CA6-7B4D0DE6CB0A} Profile {3D02CAB6-2B8E-4781-BA20-1C9267529467} KeyboardLayout 0 HKCU\Software\Rime\Weasel RimeUserDir C:\Users\用户名\AppData\Roaming\Rime Hant 1注销后重新登录用Win 空格切到「中文繁体」。不要只做「切换用户」并把另一个账户留在后台先确认问题账户自己的WeaselServer.exe能留在该会话里。2. 关掉更新询问HKCU\Software\Rime\Weasel\Updates DidRunOnce 1 CheckForUpdates 0 LastCheckTime 与正常账户相同或当前 Unix 时间三个值的类型都是REG_SZ。CheckForUpdates 0之后进程启动不再问「是否检查更新」。3. 丢掉不兼容的 build换成本次安装编译出来的词库不要覆盖整个%APPDATA%\Rime。default.custom.yaml、weasel.custom.yaml和*.userdb都还要留着。只处理buildren %APPDATA%\Rime\build build.stale然后任选一种方式得到与当前rime.dll匹配的二进制让小狼毫重新部署。开始菜单或安装目录里运行「小狼毫算法服务」后在托盘菜单里选择重新部署或执行C:\Program Files\Rime\weasel-0.17.4\WeaselDeployer.exe /deploy这条命令使用当前登录用户的%APPDATA%\Rime要用出问题的那个账户执行。粤语、两分这类词库较大部署会花几分钟。如果同一台机器上另一个账户已经用这一版小狼毫完整部署过并且共享数据目录没有另装第三方方案可以把那个账户的build拷过来作为已知可用的编译结果。拷贝时不要使用会把旧文件时间戳写回去的方式把整个旧build挪走再拷。这次实际采用的是第二种旧目录改名为build.stale-20260929再用同一天在管理员账户下生成的build补上。cangjie5.table.bin、loengfan.table.bin、stroke.table.bin的时间从 2025-11-21 变为重装当天。用户词库目录没有动。怎样确认已经好了注销后只登录出问题的账户。Win 空格切到中文繁体/ 小狼毫。打字时应出现候选框不再出现更新询问。任务管理器里该会话有WeaselServer.exe且不会每隔几秒消失再出现。应用程序日志不再新增WeaselServer.exe/rime.dll/0xc0000409。若仍异常看%TEMP%\rime.weasel\里时间最新的 INFO 日志确认它加载的*.table.bin是否都是这次部署生成的。重装时可以怎么避免小狼毫的软件用安装包重装不要只拷Program Files\Rime。用户数据拷%APPDATA%\Rime里的*.yaml、*.userdb、opencc、sync即可。build目录不要当配置一起长期保留。它是当前 librime 的编译缓存换版本后应整目录重新部署。robocopy 若带/COPY:DAT或/DCOPY:DAT旧table.bin的修改时间会被保留很容易和刚生成的prism.bin混在一起。新用户要单独把「中文繁体」和小狼毫加进输入法。安装程序写的是HKLM每个用户的语言列表在HKCU。候选框不出现时先看应用程序日志里有没有WeaselServer.exe崩溃再看%TEMP%\rime.weasel。更新对话框如果每次按键都出现优先怀疑进程在反复重启而不是更新功能本身坏了。
返回列表