c++ - Windows:更改 Exe 的 DLL 搜索顺序

标签 c++ windows dll exe

我在应用程序目录中有一个 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/

相关文章:

c++ - Qt 和 Q_OBJECT

windows - 如何劫持 Caps Lock 键进行剪切、复制、粘贴键盘操作

c++ - 在 Hook 过滤器函数中过滤 Windows 消息

c++ - __cdecl 强制前缀带下划线

windows - 复制 Windows XP 上正在运行的进程使用的 dll 是否安全?

c++通过共享指针为结构成员赋值导致SIGSEGV

c++ - 如何使用 xt::repeat?

C++ 对象不适用于点运算符

windows - 描述操作系统大小的词?

python - 无法在 Windows 7 上安装 numexpr(以及 pytables),即使存在 interpreter.pyd,dll 加载失败