Per file di configurazione dell'applicazione bindingRedirect non si applica alle DLL

StackOverflow https://stackoverflow.com/questions/1347713

  •  20-09-2019
  •  | 
  •  

Domanda

Ho creato una semplice applicazione Win32 per dimostrare Uxtheme su XP includendo una dipendenza manifesta sul ver 6 commctl32.dll Poi ho creato una semplice DLL Win32, costruito con ISOLATION_AWARE_ENABLED, e provato con un manifesto incorporato specificando sia la versione 5 e 6 della Comctl32.dll

ho ottenuto con successo l'exe e dll di utilizzare diverse versioni di Comctl32.dll utilizzando questo metodo. Sia con l'exe con 5 e la versione dll 6, e viceversa.

Poi, ho ripristinare l'applicazione e la DLL di avere un comctl ver 5 dipendenze manifesto. E ha introdotto un file di configurazione dell'applicazione:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>
  <windows>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" processorArchitecture="amd64" publicKeyToken="6595b64144ccf1df"/>
        <bindingRedirect oldVersion="5.82.7100.0" newVersion="6.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </windows>
</configuration>

Ora, quando faccio funzionare la mia applicazione, le applicazioni è chiaramente di essere reindirizzato al commctl v6 - dialoghi sono chiaramente visualizzati utilizzando il XP UXTheme abilitato. Tuttavia, la dll non viene reindirizzato e sta usando il tema non ver 5 di commctl.

Non si parla di file di configurazione per-dll per fare bindingRedirects nella documentazione. E cercando di crearne uno non fa nulla.

Lo faccio anche che facendo un bindingRedirect da una versione principale di un assembly per un altro non è uno scenario supportato, ma Im davvero solo usando commctl32 come un modo semplice ovvio per testare la meccanica.

Come faccio a reindirizzare la versione di un assembly dipendente di una dll?

È stato utile?

Soluzione 2

Così, questa domanda è stato risposto.

  • Ho usato Process Monitor per monitorare l'accesso ai file,
  • Dopo aver realizzato che accede al manifest ei file config vengono dal csrss.exe NON mio processo,
  • e Windows Vista non sarà nemmeno accedere manifest o config file che vengono aggiunti in seguito come si memorizza nella cache la loro esistenza con un timbro di data e ora per l'exe.

Dopo tutto quello che ho scoperto che LoadLibrary non sonda per un file .config durante il caricamento di DLL:

full_path_to_dll\dllname.dll.2.config

redirect obbligatorio in questo file saranno trattati.

Altri suggerimenti

  

E Windows Vista non sarà nemmeno accedere ai file manifest o .config che   sono aggiunto in seguito come si memorizza nella cache la loro esistenza con un data-ora   francobollo per l'exe.

Ho trovato che la registrazione off / on sembra per cancellare il trigger il file di configurazione da leggere di nuovo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top