Per Application Config File Bindingredirect не применяется к DLLS

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

  •  20-09-2019
  •  | 
  •  

Вопрос

Я создал простое приложение Win32, чтобы продемонстрировать Uxtheme на XP, включив манифестную зависимость от VER 6 Commctl32.dll I Затем создал простой DLL Win32, построил его с ISOLATION_AWARE_ENABLED, и протестировал его со встроенным манифестом, указав как версию 5 и 6 Comctl32.dll

Я успешно получил EXE и DLL, чтобы использовать разные версии COMCTL32.dll, используя этот метод. Оба с EXE с использованием 5 и DLL версии 6, так и наоборот.

Затем я сбрасываю приложение и DLL, чтобы иметь зависимость от 5. И представил файл конфигурации приложения:

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

Теперь, когда я запускаю свое приложение, приложения явно перенаправляются на COMMCTL V6 - диалоги четко отображаются с использованием включенного XP UXTheme. Тем не менее, DLL не перенаправляется и использует не тематическую версию 5 CommCtl.

В документации нет упоминания о файлах конфигурации для каждого DLL для выполнения BudingReadRects. И попытка создать его ничего не делает.

Я также знаю, что выполнение переплета из одной крупной версии сборки в другую не является поддерживаемым сценарием, но я действительно просто использую Commctl32 в качестве очевидного простого способа проверки механики.

Как перенаправить версию зависимой сборки DLL?

Это было полезно?

Решение 2

Итак, на этот вопрос ответил.

  • Я использовал монитор процесса для отслеживания доступа к файлу,
  • Понимая, что доступ к файлам .manifest и .config поступает из csrss.exe не моего собственного процесса,
  • И Windows Vista даже не будет доступа к. Manifest или .config Files, которые добавляются позже, поскольку он кэширует их существование вместе с маркой даты времени для EXE.

После всего этого я обнаружил, что LoadLibrary дает исследование файла .config при загрузке DLL:

full_path_to_dll\dllname.dll.2.config

Переписка перенаправления в этом файле будут обработаны.

Другие советы

И Windows Vista даже не будет доступа к. Manifest или .config Files, которые добавляются позже, поскольку он кэширует их существование вместе с маркой даты времени для EXE.

Я обнаружил, что журнал OFF/ON, кажется, очищает триггеры, который будет прочитать файл конфигурации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top