【发布时间】:2015-12-14 11:35:02
【问题描述】:
我们开发了一款标准 VSTO 插件产品(Word 2010 和 Word 2013,仅限 x86)。默认情况下,当它安装时,它会为所有用户安装(即,插件注册表项被插入到 HKLM - HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node]\Microsoft\Office\Word\Addins)。
当LoadBehavior reg 键的值设置为0x3(即“启动时加载”)时,插件工作得非常好,但是当我们将LoadBehavior 的值设置为0x10(即“按需加载”),插件无法正常工作:
由于 UAC(并且 Word 没有运行提升),HKLM 中 LoadBehavior 的值不会从 0x10 更改为 0x9,而是通过创建 LoadBehavior 键(值为 @ 987654332@) 在 HKCU 蜂巢中。
不幸的是,我们发现这个 HKCU 被覆盖的值没有被考虑到除非清单键与 LoadBehavior) 一起存在于 HKCU 配置单元中。有关此相关线程的更多信息:https://social.msdn.microsoft.com/Forums/vstudio/en-US/3776734b-333e-423b-9c08-7c7a441c3e94/load-behavior-and-word-addin?forum=vsto
解决此问题的“明显”补救措施是在安装时或将每个用户(以及 HKLM)的 Manifest 写入 HKCU 中,当每个用户第一次运行插件时.然而,这种方法有一些严重的缺点:
- 卸载插件需要删除每个用户的 HKCU 值,以防止用户遇到加载问题(不建议这样做,并且会带来其他问题/并发症,例如需要使用 Active Setup -Remove registry keys under HKCU on a per machine installation)。
- 在其(漫游)HKCU 配置单元中具有这些值的用户在登录到同一域中未安装我们插件的计算机时会遇到问题。
没有从 HKLM 获取清单是一个错误,在 HKCU 中正确设置了 LoadBehavior 吗?我认为如果 HKLM 中的 LoadBehavior 可以在 HKCU 中被覆盖而不需要 Manifest 值也被覆盖,那么这个问题将会得到解决。
有人知道解决这个问题的方法吗?
【问题讨论】:
标签: ms-word vsto ms-office word-addins