C# 安装多个XLL加载项时删除XLL加载项

C# 安装多个XLL加载项时删除XLL加载项,c#,excel,excel-dna,C#,Excel,Excel Dna,我已经用C#编写了一个基于Excel Dna的插件。 使用以下技术在用户计算机上注册它(从和): 在注册表中找到活动的Excel版本项(本例为16.0): HKEY\U当前\U用户\软件\ Microsoft\Office\16.0\Excel\Options 在名为的第一个可用字符串值中写入XLL的路径 “开放”。如本截图所示,我的加载项是在“OPEN1”键处编写的。 安装过程中一切正常,但如果使用WixInstaller卸载其中一个加载项,问题就会出现 例如,如果值“OPEN”被删除,

我已经用C#编写了一个基于Excel Dna的插件。 使用以下技术在用户计算机上注册它(从和):

  • 在注册表中找到活动的Excel版本项(本例为16.0): HKEY\U当前\U用户\软件\ Microsoft\Office\16.0\Excel\Options

  • 在名为的第一个可用字符串值中写入XLL的路径 “开放”。如本截图所示,我的加载项是在“OPEN1”键处编写的。

安装过程中一切正常,但如果使用WixInstaller卸载其中一个加载项,问题就会出现

例如,如果值“OPEN”被删除,“OPEN1”和“OPEN2”处的加载项将停止工作。Excel显式查找“OPEN”、“OPEN1”、“OPENXXX”序列,如果其中一个值丢失,它将停止枚举。 我检查了ManageOpenKey的源代码,它“盲目”删除了addin键,即使这个操作破坏了序列

我认为唯一的解决办法是编写一个函数,对所有键进行重新排序。这看起来并不难,但我的问题是:
有人找到了解决方案吗?

是的,您必须重写打开的键,使它们以连续的升序排列。

还值得从加载项配置单元中删除密钥,以防用户使用XL加载项管理器将其从活动加载项列表移动到非活动加载项列表。

是的,您必须重写打开的密钥,以便它们以连续的升序排列。
还值得从加载项配置单元中删除密钥,以防用户使用XL加载项管理器将其从活动加载项列表移动到非活动加载项列表。

Charles Williams是正确的。卸载Excel外接程序时,应在注册表中重写并重新排序卸载外接程序后出现的值(如果有)

我已经添加了一个,以便我们修复它

    • 查尔斯·威廉姆斯是正确的。卸载Excel外接程序时,应在注册表中重写并重新排序卸载外接程序后出现的值(如果有)

      我已经添加了一个,以便我们修复它