Использование API Activation Context со множеством библиотек в разных местах - PullRequest
4 голосов
/ 15 июня 2011

Я использую API-интерфейс Activation Context в клиенте .Net, работающем в местоположении A, для загрузки COM-компонента без регистрации в местоположении B (которое совершенно отличается от местоположения A, а не одноуровневый / потомок и т. Д. На одном компьютере).) на WS2008 путем передачи местоположения B в ACTCTX, и он работает нормально.

Однако теперь мне нужно сделать то же самое с другой библиотекой COM, которая, в свою очередь, имеет зависимости от пары сборок .Net COM, которыежить в совершенно разных местах.

Я добавил зависимые сборки .Net в манифест и поместил манифест и dll COM в местоположение B, но мне нужно поместить зависимые сборки .Net в местоположение A (где работает клиент), чтобы получить его вРабота.На самом деле, они будут жить в совершенно разных каталогах для местоположения A и местоположения B.

Возможно ли то, что я пытаюсь сделать, т. Е. Возможно ли загрузить несколько компонентов COM в разные несвязанные каталоги с помощью API контекста активации

1 Ответ

5 голосов
/ 30 июня 2011

.NET просматривает активный и процессный контексты активации, чтобы находить метаданные без регистра (<clrClass> и т. Д.), Как это делает нативный COM. Однако, в отличие от собственного COM, он не использует информацию, содержащуюся в контексте активации, для определения местоположения фактических файлов. Там, я полагаю, он смотрит только на GAC, после чего располагаются файлы рядом с клиентским EXE-файлом. Вы, вероятно, можете подтвердить это с помощью Sysinternals Procmon. Я полагаю, что вы можете попробовать обходные пути, предложенные Хансом, или предварительно загрузить необходимые сборки вручную в свой процесс и посмотреть, сработает ли это; Я не смог попробовать это, так как в моем сценарии клиентский exe был нативным exe, который я не мог контролировать.

...