windows - Sådan bruger du WinSxS-manifester til at omdirigere til en ældre version af en DLL?

Indlæg af Hanne Mølgaard Plasc

Problem



Lad os sige, at jeg har en applikation, der bruger MSHTML. Installering af IE9 beta ville opdatere MSHTML, der bryder min ansøgning. Jeg fandt ud af, at kopier af IE8 dll stadig er til stede i WinSxS-mappen, så måske kan jeg på nogen måde bruge dem uden at genopbygge mit program? Kan WinSxS gøre det?


Jeg har søgt i lang tid, men kunne ikke finde ud af, hvordan man omdirigere læseren til at bruge IE8 MSHTML (som er i WinSXS) i stedet for IE9 (som er i\% SYSTEMROOT\% \ system32). Eventuelle ideer/eksempler ville blive værdsat.

Bedste reference


Jeg har siden gået med en anden tilgang til dette problem. Jeg vil dele hvad jeg til sidst gjorde - jeg kaprer LoadLibrary og indlæser hvad DLL jeg vil have: DLL-fil indlæst to gange med DLL-omdirigering gennem manifest.


For at besvare spørgsmålets specifikke titel (' brug WinSxS-manifester til omdirigering ') svarer jeg med 'Nej, du kan' t 'baseret på min lange kamp med WinSxS (downvote hvis du uenig, jeg vil være glad for at se, hvordan det kan gøres.)

Andre referencer 1


Du kan helt sikkert ikke bruge WinSxS-manifester eller politisk omdirigering for at tvinge indlæsning af forskellige versioner af OS-komponenter. Mens os-komponenter også er gemt i WinSxS-butikken, kan de ikke bindes som sxs-samlinger, og derfor er denne form for omdirigering ikke mulig.


Groveling rundt for at omdirigere LoadLibrary og tvinge indlæsning af en ældre version af mshtml (eller enhver anden OS DLL) er en meget dårlig ide, og jeg anbefaler stærkt imod det. Årsager er den kendsgerning, at den ældre DLL muligvis ikke er til stede på alle installationer, at det ikke er sandsynligt, at du kan hakse alle lastestierne korrekt (og dermed skabe en underlig hybrid), og selvfølgelig er ting som MSHTML designet til brug i en specifik måde og enhver anden brug kan føre til problemer senere - især i sikkerhedsfølsomme ting som HTML.


Martyn