Frage

Ich habe eine einfache Win32 -Anwendung erstellt, um Uxtheme auf XP zu demonstrieren, indem ich eine offensichtliche Abhängigkeit von der Ver 6 commctl32.dll I anschließt. Dann habe ich eine einfache Win32 -DLL erstellt, die sie mit erstellt hat ISOLATION_AWARE_ENABLED, und testete es mit einem eingebetteten Manifest, das sowohl Version 5 als auch 6 von comctl32.dll angibt

Ich habe erfolgreich die Exe und die DLL erhalten, um verschiedene Versionen von Comctl32.dll mit dieser Methode zu verwenden. Sowohl mit dem exe mit 5 als auch der dll Version 6 als auch umgekehrt.

Dann setze ich die App und die DLL zurück, um eine Manifestabhängigkeit zu haben. Und führte eine Anwendungskonfigurationsdatei ein:

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

Wenn ich meine Anwendung nun ausführe, werden die Anwendungen eindeutig in Commctl V6 umgeleitet - Dialoge werden mithilfe des XP -Uxthems aktiviert angezeigt. Die DLL wird jedoch nicht umgeleitet und verwendet das nicht thematische Ver 5 von commctl.

In der Dokumentation werden keine Konfigurationsdateien pro DLL für BindingRedirects erwähnt. Und der Versuch, einen zu erstellen, tut nichts.

Ich weiß auch, dass es kein unterstütztes Szenario ist, ein BindingRedirect von einer Hauptversion einer Montage zu einer anderen zu machen, aber ich verwende Commctl32 wirklich nur als offensichtliche einfache Möglichkeit, die Mechanik zu testen.

Wie leite ich die Version einer abhängigen Montage einer DLL um?

War es hilfreich?

Lösung 2

Diese Frage wurde also beantwortet.

  • Ich habe den Prozessmonitor verwendet, um den Dateizugriff zu verfolgen.
  • Nachdem er erkannt hat, dass dies auf .Manifest- und .config -Dateien zugreift, stammen aus dem CSRSS.exe, nicht meinen eigenen Prozess,
  • Und Windows Vista greifen nicht einmal zu.

Nach all dem, was ich entdeckte, dass LoadLibrary beim Laden von DLLs nach einer .config -Datei untersucht wird:

full_path_to_dll\dllname.dll.2.config

Bindungsumleitungen in dieser Datei werden verarbeitet.

Andere Tipps

Und Windows Vista greifen nicht einmal zu.

Ich habe festgestellt, dass sich die Anmeldung/Ein auf die Auslöser der Konfigurationsdatei zu löschen scheint.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top