Se collego un modulo a mydll.dll, che viene distribuito utilizzando WinSxS, l'intestazione PE nel mio modulo farà semplicemente riferimento a "mydll.dll". Come determina Windows in fase di esecuzione, in primo luogo che questa dipendenza deve essere caricata tramite WinSxS e in secondo luogo in che assemblaggio si trova?In che modo WinSxS risolve i nomi DLL nelle posizioni DLL?
risposta
Lo fa tramite il "contesto di attivazione". Secondo me, WinSxS non ha senso finché non si impara a conoscere il contesto di attivazione e come viene gestito.
Ho inserito un post sul blog piuttosto lungo che spiega i dettagli allo http://omnicognate.wordpress.com/2009/10/05/winsxs/.
Per riepilogare l'articolo, il contesto di attivazione è una struttura che WinSxS utilizza in fase di esecuzione per risolvere nomi di oggetti senza nome (ad esempio nomi di DLL) per le informazioni complete su come individuarli. Lo scopo di "manifest" in WinSxS è di costruire contesti di attivazione. Senza capire come e quando questi contesti di attivazione sono costruiti e come vengono gestiti (sono tenuti su uno stack locale thread), non è possibile ragionare attraverso i passaggi coinvolti nel caricamento di una DLL tramite WinSxS ed è quindi impossibile diagnosticare la maggior parte dei problemi che possono sorgere.
Questo articolo è stato pubblicato in formato Q/A a causa di suggerimenti su meta: http://meta.stackexchange.com/questions/24608/what-is-thequetteet-for-posting-an-article. –
Nota: suggerisco di inserire almeno un pezzetto di articolo nella risposta, per stabilirne la pertinenza. –
Ad una ipotesi migliore, ha una versione della DLL impostata come predefinita, a meno che un file Manifest non indichi diversamente. – Powerlord
Penso che questo appartiene a Super User, non SO. –
Perché? Ha molta rilevanza per la programmazione (come la recente /. Storia, in cui il 90% dei lettori non capisce cosa sia o come funzioni SxS, ha mostrato). –