Мы разработали продукт, который является стандартным дополнением VSTO (Word 2010 и Word 2013, x86). По умолчанию, когда он установлен, он устанавливается для всех пользователей (то есть записи реестра добавляются в HKLM - HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node]\Microsoft\Office\Word\Addins
).MS Office Word VSTO «Загрузка по требованию»
Когда значение ключа LoadBehavior
Изотерм установлено в 0x3
(т.е. «Load при запуске»), надстройка работает прекрасно, однако, когда мы устанавливаем значение для LoadBehavior
к 0x10
(т.е. «нагрузка по требованию»), надстройка не работает, как можно было бы ожидать:
Благодаря UAC (и это слово не работает приподнятой), значение LoadBehavior
в HKLM не меняется от 0x10
к 0x9
, но вместо этого переопределяется путем создания LoadBehavior
ключа (со значением 0x9
) в улье HKCU.
К сожалению, мы обнаружили, что это HKCU переопределяется значение не учитывается если Manifest ключ не присутствует в улей 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, чтобы пользователи испытывают проблемы с загрузкой (это не рекомендуется и создает другие проблемы/осложнение, такие, как необходимость использования активной установки - Remove registry keys under HKCU on a per machine installation).
- Пользователи, которые имеют эти значения в своем (роумирующем) ульце HKCU, испытывают проблемы при входе в систему в том же домене, у которого нет нашего дополнения.
Является ли это ошибка, что манифест не получается из HKLM где LoadBehavior
установлен надлежащим образом в HKCU? Я думаю, что эта проблема будет решена, если LoadBehavior
в HKLM может быть переопределен в HKCU без необходимости переопределять значение Manifest
.
Кто-нибудь знает, как преодолеть эту проблему?
Спасибо за это @ dirk-vollmar. Чтобы пояснить, основная причина, почему вы хотите использовать «LoadOnDemand», заключается не в том, что у нас медленная надстройка, а потому, что у нас много и много надстроек, которые являются критичными для бизнеса. Они конкурируют за ресурсы и часто «конфликтуют» и за ошибки, если они загружаются одновременно. Увы, нам нужно жить в мире, где мы не можем изменить надстройки других, и когда у вас будет столько, сколько делают большинство наших клиентов, вы не можете попросить их всех улучшить свою нагрузку. – RoKa