网友作品 #000240 · 提交于 2026/09/29
Office插件管理工具:WPS宏与JS加载项一键启停






1 / 6
作品简介
Office 插件管理工具(OfficeAddinManager)是一款面向 Office/WPS 的加载项管理桌面工具,采用 HandyControl 重构的 WPF 界面,替代作者旧版 WinForms 工具,并新增 WPS JS 加载项(jsplugins/publish.xml)与 WPS 宏加载项(VBA/JSA,LoadMacros)管理。
它的核心特点是纯注册表/文件方案、零 COM 依赖:全程不启动 Excel/Word/PowerPoint/WPS 进程,不引用 Office Interop,所有开关只改注册表或文件,重启对应宿主程序后生效,不会误杀任何正在编辑的文档现场。
核心亮点
- 六大页面全覆盖:概览(全量扫描、统计卡片、宿主进程状态、快捷入口)、COM/VSTO、Excel、Word/PPT、WPS 加载项、修复与维护
- COM/VSTO 深度管理:覆盖 HKCU/HKLM、64/32 位视图与版本化键(12.0~16.0),LoadBehavior 一键启用/禁用,支持删除注册记录(可选删文件)与家庭学生版修复
- Excel/Word/PPT 普通加载项:VBA .xlam/.xla 与 ExcelDNA .xll 的 OPEN 槽位管理、Word 的 STARTUP-ADDINS 值与 STARTUP 文件夹、PowerPoint 的 AddIns 注册值
- WPS 加载项(本版新增):宏加载项按 LoadMacros 状态位启停(真机实测语义);JS 加载项按 publish.xml 的 enable 属性启停,卸载可连同离线载荷目录一并删除
- 修复与维护:清除 Office 崩溃禁用记录(Resiliency 的 DisabledItems)、VSTO 证书信任修复、同步 COM ProgId 到 WPS AddinsWL 白名单、清理 wpsjs 本地 HTTP 服务
- 不伤现场:被禁用的加载项保留在本地缓存列表中,随时可重新启用;WPS 宏工程信任等全局开关带二次确认
- 日志留痕:日志按日分文件、单文件 5MB、保留 30 天
技术与工具
- 技术栈:C#/.NET(dotnet)+ WPF + MVVM,界面框架 HandyControl 3.5,CommunityToolkit.Mvvm 8.4
- 架构:统一 AddinItem 模型 + 六个扫描/开关服务 + 修复服务,注册表解析器做成可单元测试的纯逻辑
- 质量:37 个解析器/序列化 xunit 单元测试,另附 RegistryDiag 真机诊断控制台(只读)用于校准
- 机制来源:管控机制逆向自作者四个安装器项目(excel-vba-addin-builder、exceldna-addin-builder、wpsjs-addin-builder、wps-jsa-addin-builder)并在本机注册表实测校准
- 开发方式:程序员水平,借助 AI 编程类工具与国内顶级模型完成重构升级
开发过程
作者此前手搓过一版 WinForms 插件管理工具,此番借助 AI 把旧代码整体优化:界面升级为 HandyControl 风格的 WPF,并把 WPS 宏(VBA/JSA)与 JS 加载项两类新对象纳入管理。开发中先逆向四个安装器项目的注册机制,再用真机诊断工具核对注册表实际取值,校准了若干细节语义——例如 WPS LoadMacros 的值是状态位(“0”=禁用、“1”=启用)而非“存在即加载”,JSIDEProjectTrust 为 DWORD、KDEVBProjectTrust 为 REG_SZ,publish.xml 节点重建时按原始 XML 无损还原。
适用场景
- 企业办公运维:批量查看与启停员工电脑上的 Office/WPS 加载项,清理无效或恶意插件,修复崩溃禁用与证书信任问题
- 插件开发者调试:快速切换自己开发的 COM/VSTO、ExcelDNA、WPS JS 加载项的启用状态,配合日志定位问题
- 普通用户应急:加载项把 Office 拖慢或报错时逐个禁用排查,家庭学生版修复一键执行
原始提交内容(点开查看,可复制全文去问 AI)
Office 插件管理工具(OfficeAddinManager)
Office/WPS 插件管理工具,HandyControl 重构版。纯注册表/文件方案,零 COM 依赖——全程不启动 Excel/Word/PowerPoint/WPS 进程,不引用 Office Interop。
替代旧版 WinForms 工具(..\OFFICE插件管理工具源码),并新增 WPS JS 加载项(jsplugins/publish.xml)
与 WPS 宏加载项(VBA/JSA,LoadMacros)管理。
功能总览(6 页)
| 页面 | 管理对象 | 开关机制 |
|---|---|---|
| 概览 | 全量扫描、统计卡片、宿主进程状态、快捷入口 | — |
| COM / VSTO 加载项 | HKCU/HKLM × 64/32 位视图 × 无版本键+版本化键(12.0~16.0)的 Office\{宿主}\Addins |
LoadBehavior 3=启用 / 2=禁用;含删除注册记录(可选删文件)、家庭学生版修复 |
| Excel 加载项 | VBA .xlam/.xla 与 ExcelDNA .xll;另列 %APPDATA%\Microsoft\AddIns 散落文件 |
HKCU\...\{版本}\Excel\Options 的 OPEN/OPEN1... 槽位(/R "路径")+ Excel\Add-in Manager 键 |
| Word / PPT 加载项 | Word .dot/.dotm/.wll;PowerPoint .ppam/.ppa |
Word:Word\Options 的 STARTUP-ADDINS 值 + %APPDATA%\Microsoft\Word\STARTUP 文件夹(禁用=移入本工具暂存区);PPT:PowerPoint\AddIns 注册值(值名=路径) |
| WPS 加载项 | 宏加载项(VBA/JSA/XLL/.ppam)+ JS 加载项 | 宏:HKCU\kingsoft\office\6.0\{et|wps|wpp}\LoadMacros 值数据 1=启用 / 0=禁用(真机实测语义);JS:%APPDATA%\kingsoft\wps\jsaddons\publish.xml 的 enable 属性(enable_dev/enable disable),卸载=删节点(+删离线载荷目录) |
| 修复与维护 | 清除崩溃禁用记录(Resiliency\DisabledItems)、VSTO 证书信任修复、同步 COM ProgId 到 WPS AddinsWL 白名单、清理 wpsjs 本地 HTTP 服务、常用文件夹直达 |
— |
使用说明
- 需要管理员权限(写 HKLM:家庭学生版修复、VSTO 证书修复等),启动时 UAC 授权。
- 所有开关只改注册表/文件,重启对应宿主程序后生效;工具不杀任何 Office/WPS 进程。
- 被禁用的加载项保留在列表中(来自
%LOCALAPPDATA%\OfficeAddinManager\cache.json禁用缓存),随时可重新启用。 - WPS 宏加载项的“禁用”是软禁用(值置 0),“删除注册记录”才移除注册值。
- WPS 宏工程信任(JSIDEProjectTrust / KDEVBProjectTrust)是全局开关,影响所有宏工程,页面内带二次确认。
- 日志:
logs\app-日期.log,按日分文件、单文件 5MB、保留 30 天。
开发
dotnet build .\OfficeAddinManager.slnx -c Debug
dotnet test .\OfficeAddinManager.slnx # 37 个解析器/序列化单元测试
dotnet run --project .\tools\RegistryDiag # 真机诊断:六类扫描器 + 原始注册表数据(只读)
dotnet run --project .\src\OfficeAddinManager # 启动主程序
目录结构
src\OfficeAddinManager\:主项目(WPF + MVVM + HandyControl 3.5 + CommunityToolkit.Mvvm 8.4)Models\:AddinItem 等统一模型Services\:六个扫描/开关服务 + RepairService + 缓存/进程/路径辅助(Parsers\内为可单测的纯解析逻辑)ViewModels\、Views\Pages\:六个页面
tests\OfficeAddinManager.Tests\:xunit 单元测试tools\RegistryDiag\:真机校准诊断控制台(只读)
技术要点(机制依据)
管控机制逆向自本仓库四个安装器项目(excel-vba-addin-builder、exceldna-addin-builder、
wpsjs-addin-builder、wps-jsa-addin-builder)与旧版工具源码,并已在本机注册表实测校准:
- Excel OPEN 槽位值可能含非路径数据(如
/A "ProgId"启动开关),解析器按盘符/反斜杠特征过滤; - WPS
LoadMacros值数据是状态位(“0”=禁用,“1”=启用),不是简单的“存在即加载”; JSIDEProjectTrust为 DWORD、KDEVBProjectTrust为 REG_SZ;publish.xml的install属性可能是 URL、节点可带debug等扩展属性——重建节点时按原始 XML 无损还原。