Skip to content

feat(deploy): Register-Tsf 改为系统目录副本注册模式(待文档佐证) - #113

Closed
sage-z-cn wants to merge 1 commit into
huanfeng:mainfrom
sage-z-cn:fix/tsf-registration
Closed

feat(deploy): Register-Tsf 改为系统目录副本注册模式(待文档佐证)#113
sage-z-cn wants to merge 1 commit into
huanfeng:mainfrom
sage-z-cn:fix/tsf-registration

Conversation

@sage-z-cn

@sage-z-cn sage-z-cn commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

说明(按作者建议拆分)

原 PR 同时包含 Register.cpp 修正与 dev.ps1 系统目录注册。现已拆分:

改动

Register-Tsf 改为「复制 DLL 到系统目录(x64 → System32,x86 → SysWOW64)→ 授 AppContainer 读权限 → 对系统副本 regsvr32」——DllRegisterServerGetModuleFileName 取到系统目录路径,InprocServer32 自然指向系统副本。

依据(待文档佐证,完整讨论见 #115

验证

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@sage-z-cn

Copy link
Copy Markdown
Contributor Author

I have read the CLA Document and I hereby sign the CLA

@sage-z-cn

Copy link
Copy Markdown
Contributor Author

recheck

@huanfeng

huanfeng commented Sep 5, 2026

Copy link
Copy Markdown
Owner

关于需要将输入法放到 System32 下,有明确的文档证明吗?我看一些输入法并没有把 tsf 端放到 System32 下。
当前我无法测试这款游戏。

Win11 输入栈(GIP 路径,游戏聊天框等上下文)对 in-proc TSF IME 存在
未文档化的位置约束:InprocServer32 指向系统目录副本时可激活,指向
安装目录时被静默筛除(真机 A/B 实验证据见 huanfeng#115)。对齐 weasel 安装
模式与 wind-installer 修复版(huanfeng/wind-installer#1)。

(从 huanfeng#113 按作者建议拆分;ThreadingModel/GUID 修正已拆至 huanfeng#116
@sage-z-cn sage-z-cn changed the title fix(tsf): 注册面修正——ThreadingModel 改回 Apartment,修正类别 GUID 手抄错误 feat(deploy): Register-Tsf 改为系统目录副本注册模式(待文档佐证) Sep 5, 2026
@sage-z-cn

Copy link
Copy Markdown
Contributor Author

感谢 review!已按建议拆分:ThreadingModel + GUID 修正已拆至 #116(仅 Register.cpp 改动),本 PR 仅保留 dev.ps1 的系统目录注册部分。

关于 System32 的依据,如实说明:

官方文档确实没有「TSF DLL 必须装 System32」的明文。最接近的官方条款是 IME requirements 中 AppContainer 可读性一节:"your IME must place them under the Program Files or Windows directories",且「TSF 加载的 IME DLL 与应用受同样的 app container 限制」——即 Program Files 在文档层面合规,但 GIP 上下文(游戏聊天框等)存在未文档化的更严位置约束。

支持 System32 的现有证据:

  1. 真机 A/B 实验(唯一变量为 InprocServer32 指向):Program Files 注册 → 游戏聊天框选不上(连 DllGetClassObject 都不触发,feat(tsf): 激活链路诊断日志——COM 入口与线程激活标志 #114 诊断日志可证);System32 副本注册 → 正常。完整记录见 [讨论] 反作弊(ACE)环境下未签名输入法的兼容性调研——流放之路国服/穿越火线不可用,英雄联盟正常 #115
  2. 全行业实践一致:本机注册表实测,全部 inbox IME(ChsIME/日/韩/繁中)、weasel(system32\weasel.dll)、Corvus SKK(System32\IME\IMCRVSKK\,开源纯 TSF 输入法,安装脚本)均部署在系统目录树;Program Files 下仅有微软自签名组件和被官方文档点名不支持的 TableTextService

@molezz

molezz commented Sep 7, 2026

Copy link
Copy Markdown

魔兽世界怀旧服(32位老游戏)是不是也能这样实现

@huanfeng

huanfeng commented Sep 7, 2026

Copy link
Copy Markdown
Owner

此 pr 在 main 上以另一种形式合并了,因为在安装时会对锁定的 dll 重命名,直接放在 system32 下会出现经过重命名的 dll,所以参考 QQ五笔,请到了 IME/WindInput 下,清理时会更方便。
同时还处理了 dll 移动位置后无法直接判断安装目录的一些问题。

@huanfeng huanfeng closed this Sep 7, 2026
@github-actions github-actions Bot locked and limited conversation to collaborators Sep 7, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants