找回密码
 立即注册

用户中心登录

通过NE账号安全登录

搜索
热搜: NE3 NE 3 已解决
查看: 234|回复: 6

使用WPS时,NE加载项遇到问题

[复制链接]

4

主题

1

回帖

35

积分

新手上路

积分
35
发表于 2026-10-11 09:51:35 | 显示全部楼层 |阅读模式
之前使用WPS-工具-COM加载项能加载NE,一段时间后就会疯狂报错,只好按照提示删除,删除后再使用COM加载项再加载就不行了,这种怎么办?
回复

使用道具 举报

254

主题

1万

回帖

3万

积分

管理员

积分
37553
发表于 2026-10-11 10:09:25 | 显示全部楼层
重装一下WPS ,再到选项-扩展里,安装一次就行了。

您之前报什么错啊?
回复

使用道具 举报

4

主题

1

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2026-10-11 10:25:27 | 显示全部楼层
aegeansupport 发表于 2026-10-11 10:09
重装一下WPS ,再到选项-扩展里,安装一次就行了。

您之前报什么错啊?

就是WPS弹窗报NE加载项错误,问是否需要禁用,遇到好多次了。我这次实施重装WPS
回复

使用道具 举报

254

主题

1万

回帖

3万

积分

管理员

积分
37553
发表于 2026-10-11 11:02:46 | 显示全部楼层
qianlilingbo 发表于 2026-10-11 10:25
就是WPS弹窗报NE加载项错误,问是否需要禁用,遇到好多次了。我这次实施重装WPS ...

您先试试,重装后是否可以?
回复

使用道具 举报

3

主题

57

回帖

147

积分

注册会员

积分
147
发表于 2026-10-12 17:39:50 | 显示全部楼层
分析完成。这次的关键进展:**82143 找到了直接代码证据**(极速版 Loader 的 WPS 注册代码本身就是坏的);**82099 的那句提示在现有全部源码/文档/已编译插件里都搜不到**——它来自你们手上没有的 2026-09 之后新版构建,但成因可以用现有架构代码 + 你们自己做的两份极速版审计完整推导。以下为完整报告。

## 二、帖 82143:WPS「COM 加载项」反复报错、删除后无法再加载

### 结论

三个问题叠加:**①"疯狂报错"来自 Loader 回调对未就绪 Host 对象的调用(代码里没有任何就绪检查);②"删除后再添加不回来"是因为 WPS 对话框只改它自己那层,而 NE 插件加载依赖完整的注册链(COM 服务器 + 多套注册表键 + 白名单 + DOTM + 位数匹配),且 NE 新版 Loader 自己维护 WPS 键的代码本身就是坏的死代码;③根本原因通常是宿主加载就失败(未注册/初始化崩溃/位数不匹配/版本混装),WPS 只是反复如实报错。** 客服给的"重装 WPS + 到选项→扩展里安装一次"是正确组合拳:清 WPS 侧状态 + 走完整注册链。

### 证据 1:"疯狂报错"的机制(你的代码里就能推演出来)

Loader 的 Ribbon 回调**全部直接调用 `FHostObj`**:`NEW_OnGetLabel`([LoaderObject.pas:160-162](/Users/aegean/Documents/NE4/wordaddin-2/Src/Loader/LoaderObject.pas:160))、`NEW_OnGetSupertip`([:167-169](/Users/aegean/Documents/NE4/wordaddin-2/Src/Loader/LoaderObject.pas:167))、`NEW_OnGetEnabled`([:174-176](/Users/aegean/Documents/NE4/wordaddin-2/Src/Loader/LoaderObject.pas:174))、`NEW_OnButtonClicked`([:181-184](/Users/aegean/Documents/NE4/wordaddin-2/Src/Loader/LoaderObject.pas:181))、`NEW_GetMenuContent`([:191-193](/Users/aegean/Documents/NE4/wordaddin-2/Src/Loader/LoaderObject.pas:191))。而 `FHostObj` 只在 [LoadHost:200-233](/Users/aegean/Documents/NE4/wordaddin-2/Src/Loader/LoaderObject.pas:200) 成功后才有效;加载失败(如宿主未注册,[:215-217](/Users/aegean/Documents/NE4/wordaddin-2/Src/Loader/LoaderObject.pas:215))后它保持空值([:90、:110](/Users/aegean/Documents/NE4/wordaddin-2/Src/Loader/LoaderObject.pas:110)),但**后续每一次 UI 刷新(Word/WPS 会成批调 GetLabel/GetEnabled/GetMenuContent)都继续对空对象发起 COM 调用 → 一连串错误弹窗**。你们的审计早指出了这个根因:"每个回调先验证 Ready,失败时禁用功能并返回"([审计:41](/Users/aegean/Documents/NE5ForNEcode/ne5/desktop/macos/NoteExpressNext/NoteExpress4_FastWordAddin_Code_Audit_2026-07-12.md:41))——当前快照未修。

### 证据 2:Loader 的 WPS 注册代码是坏的("加不回来"的直接代码原因)

[RegisterWordAddinInWPS:348-366](/Users/aegean/Documents/NE4/wordaddin-2/Src/Loader/LoaderObject.pas:348) 有三个致命问题:`if not Reg.OpenKey(Key, True) then` 后面是**空分支**([:357](/Users/aegean/Documents/NE4/wordaddin-2/Src/Loader/LoaderObject.pas:357),等于没做错误处理);用 `AppisWps(ParamStr(0))` 判断宿主([:368-375](/Users/aegean/Documents/NE4/wordaddin-2/Src/Loader/LoaderObject.pas:368))——但注册通常由 regsvr32/宿主进程触发,路径里根本不含 WPS/Kingsoft;再被 `ParamCount > 0` 门控([:381-384](/Users/aegean/Documents/NE4/wordaddin-2/Src/Loader/LoaderObject.pas:381))。结论:**这个函数在现实中永远不执行,WPS 侧的键/白名单从未被它可靠维护**。你们的审计同样记录了这条"WPS 路径存在不可达分支"([审计:85](/Users/aegean/Documents/NE5ForNEcode/ne5/desktop/macos/NoteExpressNext/NoteExpress4_FastWordAddin_Code_Audit_2026-07-12.md:85))。

### 证据 3:能修好问题的"完整注册链"长什么样(为什么"选项→扩展"行、WPS 对话框不行)

NE 主程序"选项→扩展"会以管理员运行 `NTAddinReg.exe`([NEConsts.pas:539](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/Public/NEConsts.pas:539);调用与参数 `-wi2`(新插件)在 [NEDlgOptions.pas:918-950、:992-1006](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NoteExpress/NEDlgOptions.pas:918)),它一次性做全:

- 写 `HKCU\Software\Microsoft\Office\Word\Addins\{NEWordAddin2.WordAddIn2}`:`LoadBehavior=3`、`Active=1`([NTAddinRegUtils.pas:549-571](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NETools/NTAddinReg/NTAddinRegUtils.pas:549));
- 写 WPS 专用键 `HKCU\Software\Kingsoft\Office\WPS\Addins\{ProgID}` 及 **白名单 `...\WPS\AddinsWL`**([NTAddinRegUtils.pas:573-604](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NETools/NTAddinReg/NTAddinRegUtils.pas:573),白名单写入 :595、删除 :619);WPS 版本门槛 4545([NTAddinRegConsts.pas:28](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NETools/NTAddinReg/NTAddinRegConsts.pas:28));
- 部署 `NEWebWordAddin.dotm`(64 位 WPS 走 Word 启动目录;32 位 WPS 明确不再部署并清理历史残留,[NTAddinRegUtils.pas:492-529](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NETools/NTAddinReg/NTAddinRegUtils.pas:492)、[NTAddinRegMSW.pas:174](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NETools/NTAddinReg/NTAddinRegMSW.pas:174));
- 清理历史双 ProgID 残留([NTAddinRegUtils.pas:622-637](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NETools/NTAddinReg/NTAddinRegUtils.pas:622))、必要时 `taskkill winword`([NTAddinRegMSW.pas:36](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NETools/NTAddinReg/NTAddinRegMSW.pas:36))。经典版附加自注册还会同时写 Word/WPS 两套键([MSOfficeAddIn.pas:242-269](/Users/aegean/Documents/NE4/NoteExpressSTD4.1_HotFixCarsiMCP/Source/Delphi/NEAddin/Word/MSO/MSOfficeAddIn.pas:242))。

**WPS 的"COM 加载项"对话框只管理它列表里的那一条(LoadBehavior/启用状态)**,不具备:重注册 COM 服务器、恢复 WPS 白名单、部署/更新 DOTM、清理旧 ProgID、校验 32/64 位匹配这些能力(WPS 侧行为无法从源码验证,属机制推断)。所以用户"删除→再添加"永远修不回来,直到走 NE 自己的安装链(或手动 regsvr32+导入 .reg,[Loader README](/Users/aegean/Documents/NE4/wordaddin-2/Src/Loader/README.md))。

### 证据 4:加载即失败的其他常见根因

- 宿主 DLL 初始化崩溃(Runtime error 217):[regsvr32-runtime-error-217-guide.md](/Users/aegean/Documents/NE4/wordaddin-2/docs/regsvr32-runtime-error-217-guide.md) 记录了 `NEWebWordAddinHost.dll` 初始化阶段异常并给出修复(try/except 包裹 `MetaDataMgr` 预加载)——这类构建在 WPS 里就是"加载→报错→禁用"循环。
- 位数/版本混装:Loader 按 DLL 位数写 32/64 位注册表([LoaderObject.pas:313-346](/Users/aegean/Documents/NE4/wordaddin-2/Src/Loader/LoaderObject.pas:313)),README 明确"32 位和 64 位需要不同的 build 以及注册表位置改动";审计列出安装器"半安装、文件锁、版本混装"风险([审计:84](/Users/aegean/Documents/NE5ForNEcode/ne5/desktop/macos/NoteExpressNext/NoteExpress4_FastWordAddin_Code_Audit_2026-07-12.md:84))。
- 多次"禁用/重载"边界未测试:审计把"加载项禁用、重新启用、Word 关闭、加载项重载"列为必测项([整改:248-261](/Users/aegean/Documents/NE5ForNEcode/ne5/desktop/macos/NoteExpressNext/NoteExpress4_FastWordAddin_Maintenance_Team_Remediation_2026-07-17.md:248))。

### 处置建议

用户/客服侧:① 关闭全部 Word/WPS;② 按客服方案重装/修复 WPS(清 WPS 自身缓存);③ 打开 NE → 选项 → 扩展 → 重新安装写作插件(走 NTAddinReg 完整链);④ 重启 WPS。仍失败则核对位数一致、清理残留(Word\Addins、Kingsoft\Office\WPS\Addins、AddinsWL、legacy `NEWordAddin2Win64` 键、kingsoft\wps\startup 旧 dotm)后重装;**不要只在 WPS 的 COM 加载项对话框里反复删/加**。

研发侧(对应你要的"这是否是设计问题"):修 `RegisterWordAddinInWPS` 死代码(显式传宿主、OpenKey 成功再写、读回验证);给所有 Loader 回调加 Ready 门禁(加载失败即降级返回、静默禁用,而非成串弹错);统一注册/卸载入口一次清理三套键 + DOTM + 双 ProgID;安装器先要求退出并等待 Word/WPS、注册失败即回滚、装完做 COM 激活与位数校验([审计:84](/Users/aegean/Documents/NE5ForNEcode/ne5/desktop/macos/NoteExpressNext/NoteExpress4_FastWordAddin_Code_Audit_2026-07-12.md:84)、[整改:190](/Users/aegean/Documents/NE5ForNEcode/ne5/desktop/macos/NoteExpressNext/NoteExpress4_FastWordAddin_Maintenance_Team_Remediation_2026-07-17.md:190))。

---

## 证据边界

- 82099 的提示原文在现有可检索范围内(NE4.1、极速版 wordaddin-2、NE5、NE4.5,含关闭忽略规则的全量检索与已编译 Host DLL 字符串扫描)均未找到,故其字面出处及"为何在新版才出现"只能结合版本更新说明与代码架构做高置信度推证,已在文中逐条标注;建议按文中"现场核查"项用真实环境(Windows + 新版 64 位构建)做一次对照验证。
- 82143 中 WPS 客户端内部行为(对话框语义、禁用列表)无法从源码验证,相关表述为机制推断;NE 侧缺陷(Loader 注册死代码、回调无门禁、注册链细节)均有逐行代码证据。
- 引用的两份极速版审计/整改文档为 2026-07 对 wordaddin-2 快照的产物;官方在 2026-09 修复了一批同类问题,用户 2026-10-07 的反馈提示仍有残留——与修复列表覆盖的领域一致。
回复

使用道具 举报

4

主题

138

回帖

534

积分

管理员

积分
534
发表于 2026-10-13 10:32:55 | 显示全部楼层
终身学习 发表于 2026-10-12 17:39
分析完成。这次的关键进展:**82143 找到了直接代码证据**(极速版 Loader 的 WPS 注册代码本身就是坏的) ...

Loader的代码 已经被干掉,我建议让同事给你开通插件和NE的直接访问权限,从而随时拿到最新的代码,用最新的代码分析。
回复

使用道具 举报

4

主题

138

回帖

534

积分

管理员

积分
534
发表于 2026-10-13 10:37:57 | 显示全部楼层
一般是操作什么会报错?

插件是有dotm 和dll 两部分构成的,我猜测删除的时候,把dll删掉了,导致重新加载com 不管用。

您的wps 版本是多少,我们这边分析下,看看能否重新问题
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|NoteExpress

GMT+8, 2026-10-25 21:44 , Processed in 0.045774 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表