我需要可靠地重定向应用程序查找特定 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(不是 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 不会加载,因此清单文件正在被 Windows 读取和处理,但只是被忽略。
有人有什么想法吗?
谢谢!
托比