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