我在应用程序目录中有一个 C++ Exe,其中包含它使用的 DLL。现在,出于某些测试目的,我需要修改现有的 DLL 并使用它来代替原始 DLL。但是为了不修改现有的安装,我无法备份现有的 DLL 并将其替换为修改后的 DLL 或将现有的 DLL 移动到别处。我也无法更改 Exe。 2 个 DLL 需要并排存在。唯一的变化应该是 Exe 应该透明地加载位于其他文件夹中的修改后的 DLL,而不是与 Exe 位于同一文件夹中的现有 DLL。有什么优雅的方法吗?
我查看了一些 MSDN 文章,但找不到执行此操作的方法。该解决方案应适用于 Windows XP 及更高版本。
最佳答案
对于每个进程,Windows 最多加载每个 DLL 名称的一个版本。如果它加载 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
中列出的 DLL,则以后不会加载类似名称的 DLL。但在 AppInit_DLLs
中,您可以列出具有显式路径的 DLL,覆盖正常的 LoadLibrary() 顺序。
因此,暂时将您的测试 DLL 放在 AppInit_DLLs
中,它将覆盖任何其他具有相同名称的 DLL。
关于c++ - Windows:更改 Exe 的 DLL 搜索顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1614686/