windows下雾凇拼音的安装

雾凇拼音(小狼毫)安装与配置记录#

日期:2026-09-22 机器:TLL-FUWENYUE / Administrator 小狼毫(Weasel):0.17.0.0,内置 librime 1.13.1 Rime 用户目录:C:\Users\Administrator\AppData\Roaming\Rime


一、需求#

  1. 安装 / 升级「雾凇拼音」方案
  2. 左 Ctrl + 左 Shift 切换输入法
  3. 左 Shift 切换中英文

二、开工前的环境现状(结论:小狼毫早就装好了)#

项目 状态
小狼毫 0.17.0.0 已安装,已注册为 TSF 输入法,WeaselServer.exe 正在运行
%APPDATA%\Rime 已存在雾凇拼音,2026-05-26 部署过
build\ 编译产物 停留在 5-26,当天未重新部署
HKCU\Keyboard Layout\Toggle 不存在(输入法切换热键未显式设置)
压缩包内的方案 比本地新(如 rime_ice.schema.yaml 19310 → 19484 字节)

所以本次实际做的是方案升级 + 配置 + 重新部署,而不是从零安装。


三、最终做法#

1. 备份#

把整个 %APPDATA%\Rime 复制到:

%APPDATA%\Rime\backup_preinstall_20260922_110510\

2. 覆盖升级方案文件#

解压 雾凇拼音full.zip 后覆盖到 %APPDATA%\Rime,但排除 rime_ice.dict.yaml:

该文件在本地被改过(tencent 大词库已注释掉)。zip 里是启用状态,覆盖会导致一次超长的词库编译。保留本地版本 = 保留用户已有选择。

3. 左 Shift 切换中英文#

写 %APPDATA%\Rime\default.custom.yaml(这是 Rime 标准的「打补丁」写法,不动原始 default.yaml):

# 雾凇拼音自定义配置 default.custom.yaml
patch:
  # 方案列表:只启用雾凇拼音(全拼)
  schema_list:
    - { schema: rime_ice }

  ascii_composer/switch_key:
    Caps_Lock: clear      # 大写锁定:清空编码
    Shift_L: commit_code  # 左 Shift:切换中英文
    Shift_R: noop         # 右 Shift:不切换
    Control_L: noop       # 左 Ctrl:不切换(留给 Ctrl+Shift 切输入法)
    Control_R: noop       # 右 Ctrl:不切换

switch_key 取值说明:

值 行为
commit_code 有编码时上屏原始编码,无编码时切换中英文
set_ascii_mode / unset_ascii_mode 单向切换
clear 清空已输入编码
noop 不响应

4. 切换输入法热键(系统层)#

「切换输入法」是 Windows 的输入语言切换,不属于 Rime 配置,改注册表:

HKCU\Keyboard Layout\Toggle
    Language Hotkey = "2"
    Hotkey          = "2"
    Layout Hotkey   = "2"

对应「控制面板 → 区域和语言 → 高级键设置」里的 Ctrl + Shift。

常用取值:1 = 左 Alt+Shift,2 = Ctrl+Shift,3 = 未分配。

5. 重新部署#

重点:不能用命令行直接调 WeaselDeployer.exe /deploy(见坑 5)。最终有效的方式是用资源管理器打开开始菜单快捷方式:

Start-Process explorer.exe -ArgumentList `
  'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\小狼毫输入法\【小狼毫】重新部署.lnk'

再同样方式启动「小狼毫算法服务」快捷方式,让服务端重新加载:

Start-Process explorer.exe -ArgumentList `
  'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\小狼毫输入法\小狼毫算法服务.lnk'

6. 验证#

build\ 生成 14 个产物(default.yaml / weasel.yaml / rime_ice.* / melt_eng.* / radical_pinyin.*)

build\default.yaml 中确认生效:

ascii_composer:
  good_old_caps_lock: true
  switch_key:
    Caps_Lock: clear
    Control_L: noop
    Control_R: noop
    Shift_L: commit_code
    Shift_R: noop
...
schema_list:
  - schema: rime_ice

部署成功日志的标志(%TEMP%\rime.weasel\*.log):

deployment_tasks.cc:83]  updating rime installation info.
deployment_tasks.cc:186] updating schemas.
deployment_tasks.cc:358] preparing dictionary 'rime_ice'.
deployment_tasks.cc:243] finished updating schemas: 3 success, 0 failure.
deployment_tasks.cc:581] clean up trash.

四、踩过的坑#

坑 1:powershell -Command "..." 里 $ 会被吞掉#

内联命令中的 $env:APPDATA、$_.Name 会被外层处理吃掉,导致命令静默失败或结果为空。

解法:把脚本写到 .ps1 文件里再用 powershell -File 执行。

坑 2:PowerShell 5.1 按 GBK 读取 .ps1#

powershell -File 走的是 Windows PowerShell 5.1(不是 Core),默认按 ANSI(GBK) 解码脚本文件。脚本里写中文注释或中文字符串会变成乱码(本次 installation.yaml 里的 小狼毫 被写成 灏忕嫾姣?)。

解法二选一:

  • 脚本保持纯 ASCII
  • 用码点构造中文再按 UTF-8 写文件:
$name = [string][char]0x5c0f + [string][char]0x72fc + [string][char]0x6beb  # 小狼毫
$enc  = New-Object System.Text.UTF8Encoding($false)   # 无 BOM
[System.IO.File]::WriteAllText($path, $txt, $enc)

坑 3:把「切换输入法」当成 Rime 的配置去找#

一开始在 weasel.yaml / weasel.custom.yaml / default.yaml 里搜 hotkey、switch_key,方向错了。

  • 切换中英文(ascii_mode)→ Rime 层,ascii_composer.switch_key
  • 切换输入法(换 IME)→ Windows 层,HKCU\Keyboard Layout\Toggle

坑 4:Windows 无法区分左右 Ctrl#

「高级键设置」只提供 Ctrl+Shift / 左 Alt+Shift,不区分左右。所以设成 Ctrl+Shift 后,右 Ctrl+Shift 同样会切换输入法。要做到严格只认左侧,只能靠 AutoHotkey 之类的外部钩子拦截。

同理系统层的 Toggle 也没有「只响应左边」的开关。

坑 5:WeaselDeployer.exe /deploy 静默空转(最大的坑)#

表现:进程退出码 0,无输出,build\ 一个文件都不生成。日志显示它只加载了配置,然后就结束了。

对比日志发现关键差异:

成功的部署 空转的部署
组件注册 levers_module.cc:16 注册 installation_update / workspace_update / schema_update / prebuild_all_schemas / cleanup_trash … 只注册了 prebuild_all_schemas
关键日志 有 deployment_tasks.cc 完全没有

即维护流程压根没启动。尝试过的无效手段:

  • WeaselDeployer.exe /deploy(多次,含 -Wait)
  • 先停掉 WeaselServer 再部署
  • 启动 WeaselServer.exe /deploy
  • 改 installation.yaml 版本号 + 刷新源文件时间戳强制重建

根因判断:从受限/沙箱化的进程启动的子进程,无法与 WeaselServer 完成 IPC(UIPI 完整性级别隔离)。辅助证据——尝试 Stop-Process 干掉由安装程序启动的那个 WeaselServer(PID 27820)时返回 Access denied(它是高完整性级别进程),说明确实存在完整性级别差异。

解法:让 explorer.exe 去 ShellExecute 快捷方式,子进程由 explorer 派生、不继承沙箱限制:

Start-Process explorer.exe -ArgumentList '<开始菜单 .lnk 的完整路径>'

开始菜单里可用的快捷方式(C:\ProgramData\Microsoft\Windows\Start Menu\Programs\小狼毫输入法\):

快捷方式 目标
【小狼毫】重新部署 WeaselDeployer.exe /deploy
【小狼毫】输入法设定 WeaselDeployer.exe
【小狼毫】用户词典管理 WeaselDeployer.exe /dict
【小狼毫】用户资料同步 WeaselDeployer.exe /sync
小狼毫算法服务 WeaselServer.exe
【小狼毫】检查新版本 WeaselServer.exe /update
【小狼毫】安装选项 WeaselSetup.exe

经验:排查这类问题时,先确认「目标程序在用户自己双击时能不能正常工作」。如果用户手动点「重新部署」能成、而脚本调用不成,那就是执行环境问题,不要再在参数上折腾。

坑 6:误删 build\ 导致输入法当场不可用#

为了"强制全量重建",把 build\ 整个删了,结果重建没跑起来(坑 5),于是:

  • 引擎回退到共享目录的 default.yaml,加载的是 luna_pinyin
  • 而 build\luna_pinyin.table.bin 已被删掉 → 报错 Error loading table for dictionary 'luna_pinyin'
  • 中间还把 WeaselServer 杀掉过一次,输入法彻底没服务

教训:build\ 是运行期必需的编译产物,不是可以随便清的缓存。要强制重建,正确顺序是先确认部署命令真的能跑通,再删;更稳妥的做法是只删除单个方案的产物,或者根本别删、直接调部署(部署自己会检测源文件变化)。

坑 7:WeaselServer 是单实例,从沙箱启动它会顶掉正常实例#

新起一个 WeaselServer.exe,旧实例会自己退出(日志里表现为 engine disposed → closed db)。

所以:

  • 「重启服务」不需要 kill,直接再启动一次就行
  • 但从沙箱里启动,会把原来那个正常的、带托盘图标的实例挤掉,让后续的部署更难恢复 —— 这次就是这么把环境搞乱的

坑 8:手工改 installation.yaml 写坏了中文#

试图靠改 installation.yaml 里的 distribution_version 来触发全量重建,结果把 distribution_name 写成乱码 灏忕嫾姣?(坑 2 的编码问题)。

修正见坑 2 的 [char]0x... + UTF8Encoding($false) 写法。最终内容:

distribution_code_name: Weasel
distribution_name: "小狼毫"
distribution_version: 0.17.0
install_time: "Tue May 26 17:01:22 2026"
installation_id: "3ae8d4e8-577a-47d8-a22b-74428a3db1fc"
rime_version: 1.13.1
update_time: "Tue Sep 22 11:46:44 2026"

坑 9:长时间脚本会被切到后台#

execute_command 跑超过一定时长会被自动切到后台执行,返回结果变成 skipped。长时间等待(比如等部署)要拆成「触发」+「轮询」两步,别写成一个长脚本。

坑 10:PowerShell 参数名笔误#

-ErrorActionSilentlyContinue 少了空格,报 NamedParameterNotFound。正确是 -ErrorAction SilentlyContinue。


五、日志位置速查#

%TEMP%\rime.weasel\
  rime.weasel.<机器名>.<用户名>.log.INFO.<时间>.<PID>.log
  rime.weasel.<机器名>.<用户名>.log.WARNING.<时间>.<PID>.log
  rime.weasel.<机器名>.<用户名>.log.ERROR.<时间>.<PID>.log

按 PID 区分是 WeaselDeployer 还是 WeaselServer 产生的日志。


六、回滚#

完整备份在:

%APPDATA%\Rime\backup_preinstall_20260922_110510\

需要回滚就把该目录下的文件复制回 %APPDATA%\Rime\(保留 build\ 现状或一并替换),然后重新部署。


七、官方链接#


皖ICP备2026013880号