Использование API-интерфейса Activation Context с множеством библиотек в разных местах
Я использую API-интерфейс Activation Context в клиенте.Net, работающем в местоположении A, для загрузки COM-компонента без регистрации в местоположении B (которое совершенно отличается от местоположения A, а не одноуровневого / потомкового и т. Д. На одном компьютере) на WS2008. передавая местоположение B в ACTCTX, и он работает нормально.
Однако теперь мне нужно сделать то же самое с другой COM-библиотекой, которая, в свою очередь, зависит от пары.Net COM-сборок, которые живут в совершенно разных местах.
Я добавил зависимые сборки.Net в манифест и поместил манифест и COM-библиотеку в местоположение B, но я должен поместить зависимые сборки.Net в местоположение A (где работает клиент), чтобы заставить его работать. На самом деле они будут жить в совершенно разных каталогах для местоположения A и местоположения B.
Возможно ли то, что я пытаюсь сделать, т. Е. Возможно ли загрузить несколько компонентов COM в разные несвязанные каталоги, используя api контекста активации?
1 ответ
.NET просматривает активный и процессный контексты активации, чтобы обнаружить безрегулярные метаданные (<clrClass>
и т. д.), как это делает нативный COM Однако, в отличие от собственного COM, он не использует информацию, содержащуюся в контексте активации, для определения местоположения фактических файлов. Там, я полагаю, он смотрит только на GAC, после чего располагаются файлы рядом с клиентским EXE-файлом. Вы, вероятно, можете подтвердить это с помощью Sysinternals Procmon. Я полагаю, что вы можете попробовать обходные пути, предложенные Хансом, или предварительно загрузить необходимые сборки вручную в ваш процесс и посмотреть, сработает ли это; Я не смог попробовать это, так как в моем сценарии клиентский exe был нативным exe, который я не мог контролировать.