Según la aplicación, la configuración del archivo BindingRedirect no se aplica a DLLS

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

  •  20-09-2019
  •  | 
  •  

Pregunta

Creé una aplicación Win32 simple para demostrar UxTheme en XP al incluir una dependencia manifiesta en el Ver 6 CommCTL32.Dll. Luego creé una simple DLL Win32, la construí con ISOLATION_AWARE_ENABLED, y lo probé con un manifiesto integrado que especifica tanto la versión 5 como 6 de Comctl32.dll

Obtuve con éxito el EXE y DLL para usar diferentes versiones de ComCTL32.Dll usando este método. Tanto con EXE usando 5 como DLL versión 6, y al revés.

Luego, reinicié la aplicación y la DLL para tener una dependencia manifiesta Comctl Ver 5. E introdujo un archivo de configuración de la aplicación:

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

Ahora, cuando ejecuto mi aplicación, las aplicaciones se están redirigiendo claramente a CommCTL V6: los diálogos se muestran claramente utilizando el XP UXTHEME habilitado. Sin embargo, la DLL no se está redirigiendo y está utilizando el VER 5 no temático de CommCTL.

No se menciona los archivos de configuración por DLL para hacer BindingRedirects en la documentación. Y tratar de crear uno no hace nada.

También sé que hacer una redirección vinculante de una versión principal de un ensamblaje a otro no es un escenario compatible, pero realmente solo estoy usando CommCTL32 como una manera fácil de probar la mecánica.

¿Cómo redirecciono la versión de un ensamblaje dependiente de una DLL?

¿Fue útil?

Solución 2

Entonces, esta pregunta ha sido respondida.

  • Utilicé el monitor de proceso para rastrear el acceso a los archivos,
  • Después de darse cuenta de que los archivos .Manifest y .config provienen de los csrss.exe no es mi propio proceso,
  • Y Windows Vista ni siquiera accederá a los archivos. Manifest o .Config que se agregan más tarde, ya que almacena en caché su existencia junto con un sello de fecha para el EXE.

Después de todo, descubrí que LoadLibrary sondea para un archivo .config al cargar dlls:

full_path_to_dll\dllname.dll.2.config

Se procesarán redireccionamientos vinculantes en este archivo.

Otros consejos

Y Windows Vista ni siquiera accederá a los archivos. Manifest o .Config que se agregan más tarde, ya que almacena en caché su existencia junto con un sello de fecha para el EXE.

Descubrí que el inicio de sesión/ON parece borrar los desencadenantes del archivo de configuración que se lee nuevamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top