2009-10-05 9 views
6

Wenn ich ein Modul mit mydll.dll verknüpfen, die mit WinSxS bereitgestellt wird, referenziert der PE-Header in meinem Modul einfach "mydll.dll". Wie ermittelt Windows zur Laufzeit zum einen, dass diese Abhängigkeit über WinSxS geladen werden sollte und zum anderen, in welcher Baugruppe es sich befindet?Wie löst WinSxS DLL-Namen in DLL-Speicherorte auf?

+0

Zur besten Schätzung hat es eine Version der DLL als Standard festgelegt, es sei denn eine Manifest-Datei sagt es anders. – Powerlord

+0

Ich denke, das gehört auf Super User, nicht SO. –

+1

Warum? Es hat eine große Relevanz für die Programmierung (wie die jüngste /. Geschichte, wo 90% der Leser nicht verstehen, was SxS ist oder wie es funktioniert, hat gezeigt). –

Antwort

7

Dies geschieht über den "Aktivierungskontext". WinSxS macht meiner Meinung nach keinen Sinn, bis man den Aktivierungskontext und seine Verwaltung kennt.

Ich habe einen ziemlich langen Blogpost, der die Details bei http://omnicognate.wordpress.com/2009/10/05/winsxs/ erklärt.

Um den Artikel zusammenzufassen, ist der Aktivierungskontext eine Struktur, die WinSxS zur Laufzeit verwendet, um nicht versionierte Objektnamen (z. B. DLL-Namen) auf die vollständigen Informationen zu finden, wie sie zu finden sind. Der Zweck von "Manifesten" in WinSxS besteht darin, Aktivierungskontexte zu konstruieren. Ohne zu verstehen, wie und wann diese Aktivierungskontexte erstellt werden und wie sie verwaltet werden (sie werden auf einem threadlokalen Stack gehalten), ist es nicht möglich, die Schritte zum Laden einer DLL über WinSxS zu verstehen und es ist daher unmöglich zu diagnostizieren die Mehrheit der Probleme, die auftreten können.

+0

Dieser Artikel wurde im Q/A-Format aufgrund von Vorschlägen auf Meta veröffentlicht: http://meta.stackexchange.com/questions/24608/what-is-the-tiquette-for-posting-an-article. –

+0

Hinweis: Ich schlage vor, zumindest einen kleinen Teil des Artikels in die Antwort aufzunehmen, um seine Relevanz zu ermitteln. –

Verwandte Themen