我们开发了一款标准VSTO插件(Word 2010和Word 2013,仅限x86)。默认情况下,安装时会为所有用户安装(即将插件注册表项插入HKLM - HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node]\Microsoft\Office\Word\Addins
)。MS Office Word VSTO“按需加载”
当为LoadBehavior
REG键的值设置为0x3
(即“在启动时加载”),该插件工作完全正常,但是当我们设置为LoadBehavior
到0x10
的值(即“按需加载”),该插件无法正常工作,因为我们所期望的:
由于UAC(这词不运行升高),在HKLM LoadBehavior
不是从0x10
到0x9
改变,而是通过创建LoadBehavior
键替换的值(价值0x9
)在HKCU配置单元中。
不幸的是,我们发现,除非清单项存在与LoadBehavior
)沿HKCU蜂巢该HKCU重写值不考虑。 https://social.msdn.microsoft.com/Forums/vstudio/en-US/3776734b-333e-423b-9c08-7c7a441c3e94/load-behavior-and-word-addin?forum=vsto
此问题的“明显的”补救办法是写Manifest
到HKCU为每个用户(以及在HKLM)在安装时OR当每个用户运行该插件的:对本次关联线程更多信息第一次。然而,有一些严重的缺点,使用这种方法:
- 卸载的插件,就必须消除所有用户HKCU值,以防止用户遇到加载问题(不建议这样做,并造成其他问题/并发症,如需要使用智能安装程序 - Remove registry keys under HKCU on a per machine installation)。
- 在其漫游HKCU配置单元中具有这些值的用户在登录到未安装我们的插件的同一域中的计算机时遇到问题。
难道不是从HKLM其中LoadBehavior
适当地设定在HKCU获得清单中的错误?我认为如果HKLU中的LoadBehavior
可以在HKCU中被覆盖而不需要Manifest
值也被覆盖,那么这个问题就可以解决。
任何人都知道一种方法来克服这个问题?
感谢@dirk-vollmar。只是澄清一下,想要使用'LoadOnDemand'的主要原因不是因为我们的插件很慢,而是因为我们有很多很多的插件都是关键业务的。这些资源竞争资源,如果同时加载,通常会发生“冲突”和错误。唉,我们必须生活在一个我们无法改变其他人的加载项的世界中,而当我们的客户和大部分客户一样多时,你不能要求他们全部来提高他们的负载。 – RoKa