Мы разработали продукт, являющийся стандартной надстройкой VSTO (только для Word 2010 и Word 2013, x86). По умолчанию при установке он устанавливается для всех пользователей (т.е. записи реестра надстройки вставляются в HKLM - HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node]\Microsoft\Office\Word\Addins
).
Когда значение для ключа LoadBehavior
установлено на 0x3
(т.е. «Загрузка при запуске»), надстройка работает отлично, однако, когда мы устанавливаем значение для LoadBehavior
на 0x10
(т.е. «Загрузка по запросу»), надстройка не работает. работать так, как мы и ожидали:
Из-за UAC (и того, что Word не работает с повышенными правами) значение LoadBehavior
в HKLM не изменяется с 0x10
на 0x9
, а вместо этого переопределяется путем создания ключа LoadBehavior
(со значением 0x9
) в кусте HKCU.
К сожалению, мы обнаружили, что это переопределенное значение 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
в HKCU для каждого пользователя (а также в HKLM) во время установки ИЛИ, когда каждый пользователь запускает надстройку в первый раз. Однако у этого подхода есть несколько серьезных недостатков:
- Удаление надстройки требует удаления всех пользовательских значений HKCU, чтобы у пользователей не возникало проблем с загрузкой (это не рекомендуется и создает другие проблемы/осложнения, такие как необходимость использования Active Setup — Удалить ключи реестра в HKCU при установке на машину).
- Пользователи, которые имеют эти значения в своем (перемещаемом) кусте HKCU, испытывают проблемы при входе на компьютер в том же домене, на котором не установлена наша надстройка.
Является ли ошибкой то, что манифест не получается из HKLM, где LoadBehavior
правильно установлен в HKCU? Я думаю, что эта проблема была бы решена, если бы LoadBehavior
в HKLM можно было переопределить в HKCU без необходимости переопределения значения Manifest
.
Кто-нибудь знает способ преодолеть эту проблему?