Question

J'ai créé une simple application Win32 pour démontrer UXTheme sur XP en incluant une dépendance manifeste sur le ver 6 commctl32.dll Je me suis alors créé simple dll Win32, construit avec ISOLATION_AWARE_ENABLED et testé avec un manifeste intégré spécifiant à la fois la version 5 et 6 de Comctl32.dll

Je suis arrivé avec succès et dll exe utiliser différentes versions de comctl32.dll en utilisant cette méthode. Les deux avec l'exe en utilisant 5 et la version dll 6, et l'inverse.

Alors, je réinitialiser l'application et la dll d'avoir un comctl ver 5 dépendance manifeste. Et introduit un fichier de configuration d'application:

<?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>

Maintenant, quand je lance mon application, les applications est clairement redirigés vers commctl v6 - dialogues sont clairement affichées en utilisant le XP UXTheme activé. Cependant, la dll n'est pas redirigé et utilise le non sur le thème ver 5 commctl.

Il n'y a aucune mention de fichiers de configuration par-dll pour faire bindingRedirects dans la documentation. Et en essayant de créer un ne fait rien.

je sais aussi que faire une bindingRedirect d'une version majeure d'un ensemble à l'autre n'est pas un scénario pris en charge, mais Im vraiment juste en utilisant commctl32 comme évidente moyen facile de tester la mécanique.

Comment rediriger la version d'un assemblage dépendant d'une dll?

Était-ce utile?

La solution 2

Alors, cette question a reçu une réponse.

  • je Process Monitor pour suivre l'accès aux fichiers,
  • Après avoir réalisé que les accès à .manifest et les fichiers .config viennent du csrss.exe pas mon propre processus,
  • Et Windows Vista ne sera pas même accéder à des fichiers .manifest ou .config qui sont ajoutés plus tard, il met en cache leur existence avec un horodatage pour l'exe.

Après tout ce que j'ai découvert que LoadLibrary ne sonde pour un fichier .config lors du chargement dll:

full_path_to_dll\dllname.dll.2.config

réoriente de liaison dans ce fichier seront traitées.

Autres conseils

  

Et Windows Vista ne sera même pas accéder à des fichiers .manifest ou .config que   sont ajoutés plus tard, il met en cache leur existence avec une date-heure   timbre pour l'exe.

J'ai trouvé que l'exploitation forestière off / on semble effacer les déclencheurs du fichier de configuration à lire à nouveau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top