Как WinSxS разрешает имена DLL в местах расположения DLL? - PullRequest
6 голосов
/ 05 октября 2009

Если я свяжу модуль с mydll.dll, которая развернута с помощью WinSxS, PE-заголовок в моем модуле будет просто ссылаться на «mydll.dll». Как Windows определяет во время выполнения, во-первых, что эта зависимость должна быть загружена через WinSxS, а во-вторых, в какой сборке она находится?

1 Ответ

7 голосов
/ 05 октября 2009

Это происходит через «контекст активации». На мой взгляд, WinSxS не имеет никакого смысла, пока вы не узнаете о контексте активации и о том, как им управлять.

Я разместил довольно длинное сообщение в блоге с подробностями http://omnicognate.wordpress.com/2009/10/05/winsxs/.

Чтобы подвести итог статьи, контекст активации - это структура, которую WinSxS использует во время выполнения для преобразования неверсионных имен объектов (например, имен DLL) в полную информацию о том, как их найти. Целью «манифестов» в WinSxS является создание контекстов активации. Без понимания того, как и когда создаются эти контексты активации и как они управляются (они хранятся в локальном стеке потока), невозможно рассуждать по шагам, связанным с загрузкой DLL через WinSxS, и поэтому невозможно диагностировать большинство проблем, которые могут возникнуть.

...