安装多个 XLL 插件时删除 XLL 插件
Remove XLL addin when multiple XLL addins are installed
我用 C# 编写了一个 Excel-基于 Dna 的插件。
使用以下技术在用户计算机上注册它(来自 WixInstaller and ManageOpenKey):
在注册表中找到活动的 Excel 版本密钥(本例为 16.0):
HKEY_CURRENT_USER\Software\Microsoft\Office.0\Excel\Options
在第一个可用的字符串值named中写入XLL的路径
"OPEN"。如该屏幕截图所示,我的插件写在 "OPEN1" 键处。
安装中一切正常,但如果使用 WixInstaller 卸载其中一个插件,问题就会出现。
例如,如果删除值 "OPEN",则 "OPEN1" 和 "OPEN2" 处的插件将停止运行。 Excel 明确查找 "OPEN"、"OPEN1"、"OPENXXX" 序列,如果缺少其中一个值 - 它会停止枚举。
我检查了 ManageOpenKey 的源代码 - 它 "blindly" 删除了插件密钥,即使此操作破坏了序列。
我想到的唯一解决方案是编写一个重新排序所有键的函数。这看起来并不难,但我的问题是:
有人找到解决方案了吗?
是的,您必须重写 OPEN 键,使它们处于连续的升序中。
如果用户使用 XL 插件管理器将其从插件的活动列表移至非活动列表,也值得从 ADDINS 配置单元中删除密钥。
查尔斯·威廉姆斯 是正确的。卸载 Excel 加载项时,您应该重写和重新排序注册表中卸载加载项后的值(如果有)。
我添加了一个 issue to the Excel-DNA WiXInstaller Template repo,以便我们修复它。
我用 C# 编写了一个 Excel-基于 Dna 的插件。 使用以下技术在用户计算机上注册它(来自 WixInstaller and ManageOpenKey):
在注册表中找到活动的 Excel 版本密钥(本例为 16.0): HKEY_CURRENT_USER\Software\Microsoft\Office.0\Excel\Options
在第一个可用的字符串值named中写入XLL的路径 "OPEN"。如该屏幕截图所示,我的插件写在 "OPEN1" 键处。
安装中一切正常,但如果使用 WixInstaller 卸载其中一个插件,问题就会出现。
例如,如果删除值 "OPEN",则 "OPEN1" 和 "OPEN2" 处的插件将停止运行。 Excel 明确查找 "OPEN"、"OPEN1"、"OPENXXX" 序列,如果缺少其中一个值 - 它会停止枚举。 我检查了 ManageOpenKey 的源代码 - 它 "blindly" 删除了插件密钥,即使此操作破坏了序列。
我想到的唯一解决方案是编写一个重新排序所有键的函数。这看起来并不难,但我的问题是: 有人找到解决方案了吗?
是的,您必须重写 OPEN 键,使它们处于连续的升序中。
如果用户使用 XL 插件管理器将其从插件的活动列表移至非活动列表,也值得从 ADDINS 配置单元中删除密钥。
查尔斯·威廉姆斯
我添加了一个 issue to the Excel-DNA WiXInstaller Template repo,以便我们修复它。