MS Office Word VSTO"按需加载"

RoK*_*oKa 17 vsto ms-word ms-office word-addins

我们开发了一种标准VSTO插件的产品(Word 2010和Word 2013,仅限x86).默认情况下,安装它时,会为所有用户安装它(即,将插件注册表项插入HKLM - HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node]\Microsoft\Office\Word\Addins).

当该值LoadBehaviorREG键值设置为0x3(即"在启动时加载"),该插件工作完全正常,但是当我们设定的值LoadBehavior0x10(即"按需加载"),该插件无法正常工作,我们会期望:

由于UAC(并且Word没有提升),LoadBehaviorHKLM中的值不会更改为0x10,0x9而是通过在HKCU配置单元中创建LoadBehavior密钥(带值0x9)来覆盖.

不幸的是,我们发现,这个HKCU重写值不考虑,除非清单关键是存在于HKCU蜂巢沿LoadBehavior).有关此相关主题的更多信息:https://social.msdn.microsoft.com/Forums/vstudio/en-US/3776734b-333e-423b-9c08-7c7a441c3e94/load-behavior-and-word-addin?forum=vsto

这个问题的"明显"补救措施是Manifest在安装时每个用户第一次运行插件时为每个用户(以及HKLM)写入HKCU .但是这种方法有一些严重的缺点:

  • 卸载插件需要删除每个用户HKCU值以防止用户遇到加载问题(这不建议使用并引发其他问题/复杂性,例如需要使用Active Setup - 在每台计算机上安装时删除HKCU下的注册表项).
  • 在(漫游)HKCU配置单元中具有这些值的用户在登录到未安装插件的同一域中的计算机时会遇到问题.

难道不是从HKLM获得清单中的错误,其中LoadBehavior适当地设置在HKCU?我认为如果LoadBehaviorHKLU中的HKLM可以被覆盖而不需要Manifest覆盖价值,那么这个问题就会得到解决.

有谁知道克服这个问题的方法?

Dir*_*mar 0

您使用按需加载的原因很可能是为了提高启动性能,如MSDN中所述。然而,按需加载带来了一系列问题(不支持动态 Ribbon UI 状态、HKLM 部署问题等)。

正如您已经说过的, Load at Startup没有问题。因此,加载加载项的推荐方法是使用LoadBehavior0x3

如果您遇到加载项加载性能问题,一种解决方案可能是使用始终在启动时加载的轻量级加载项,然后该加载项充当实际加载项的加载程序。