Мне нужно надежно перенаправить приложения на поиск определенной DLL. Использование метода app.exe.local не работает, потому что локальные файлы игнорируются, если приложение имеет манифест (встроенный или отдельный файл). Поэтому я пытаюсь перенаправить DLL, определив DLL как частную сборку в манифесте.
У меня есть тестовое приложение LoadDll.exe, которое просто вызывает
LoadLibrary("C:\\EmptyDll.dll");
В LoadDll.exe есть манифест (в виде отдельного файла LoadDll.exe.manifest)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.1"
processorArchitecture="x86"
name="LoadDll"
type="win32"
/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="EmptyDll"
version="1.0.0.1"
processorArchitecture="x86"
/>
</dependentAssembly>
</dependency>
</assembly>
Папка приложения, содержащая LoadDll.exe(NOT c: \), содержит файл EmptyDll.dll со встроенным манифестом.
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<assemblyIdentity
type="win32"
name="EmptyDll"
version="1.0.0.1"
processorArchitecture="x86"
/>
</assembly>
Однако LoadDll.exe идет вперед и загружает C:\EmptyDll.dll, а не файл EmptyDll.dll в папку приложения.
Если вы нарушите либо манифест (например, измените номер версии в идентификаторе манифеста EmptyDll.dll), LoadDll.exe не загружается, поэтому файлы манифеста читаются и обрабатываются окнами, но просто игнорируются.
У кого-нибудь есть идеи?
Спасибо!
Тоби