如果我将模块链接到使用WinSxS部署的mydll.dll,我模块中的PE头将只引用“mydll.dll”。 Windows如何在运行时确定,首先应该通过WinSxS加载此依赖项,其次是它所在的程序集?
答案 0 :(得分:7)
它通过“激活上下文”来实现。在我看来,在您了解激活上下文及其管理方式之前,WinSxS没有任何意义。
我在http://omnicognate.wordpress.com/2009/10/05/winsxs/上写了一篇相当长的博文,解释了详细信息。
总结本文,激活上下文是WinSxS在运行时使用的结构,用于将未版本控制的对象名称(例如DLL名称)解析为有关如何定位它们的完整信息。 WinSxS中“清单”的目的是构建激活上下文。如果不了解这些激活上下文的构造方式和时间以及它们如何被管理(它们保存在线程局部堆栈中),就不可能推断通过WinSxS加载DLL所涉及的步骤,因此无法诊断可能出现的大多数问题。