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?
Antwort
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.
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. –
Hinweis: Ich schlage vor, zumindest einen kleinen Teil des Artikels in die Antwort aufzunehmen, um seine Relevanz zu ermitteln. –
- 1. Wie kann ich Win32-Assemblys deinstallieren und WinSxS bereinigen?
- 2. Wie löst mein Webbrowser Domänennamen auf?
- 3. Wie löst ghc Pfade für Bibliotheken auf?
- 4. Wie löst Castle Singleton-Objekte auf?
- 5. Wie löst der Compiler unendliche Referenzschleifen auf?
- 6. NullPointerException bezogen auf FragmentManager.popBackStack. Wie löst man?
- 7. Wie löst man ORA-29471 auf dbms_sql.open_cursor?
- 8. Wie genau löst mDNS Adressen auf?
- 9. Wie löst man javax.naming.PartialResultException?
- 10. Wie löst man java.nio.charset.UnmappableCharacterException in Scala 2.8.0 auf?
- 11. Wie löst man den ValueError proj_w in Tensorflow auf?
- 12. Wie löst man $ q.all Versprechen in Jasmine Unit Tests auf?
- 13. Wie löst man verschiedene Dienste in verschiedenen Controllern auf?
- 14. mysql löst Probleme auf Update
- 15. Wie löst Laravel Abhängigkeiten basierend auf Typhinweisen auf?
- 16. Wie löst man eine IndexOutOfRangeException auf Bit-Wert auf?
- 17. Wie Oracle konvertieren löst
- 18. Wie löst man alle in einer Abfrage?
- 19. Wie löst man Querverweise in OOP?
- 20. Wie löst man dieses Puzzle in Prolog?
- 21. Wie löst man Wiederholungsrelationen in Python
- 22. Wie löst man dieses Verknüpfungsproblem in Makefile?
- 23. Stil löst in Silverlight
- 24. Wie löst man ein Integral in Java?
- 25. Wie löst man AttributeError in Python active_directory?
- 26. Wie löst man diesen Fehler in C#?
- 27. Wie löst man Konflikte in der Typfamilie?
- 28. Wie löst man "nicht gezählt" in perf?
- 29. Wie löst man zyklische Beziehungen in SQL?
- 30. Wie löst man diese Optimierung?
Zur besten Schätzung hat es eine Version der DLL als Standard festgelegt, es sei denn eine Manifest-Datei sagt es anders. – Powerlord
Ich denke, das gehört auf Super User, nicht SO. –
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). –