将 windows 可执行文件搜索到 dll 的自定义目录中
Make windows executable search into a custom directory for dlls
假设我有一个文件夹 Program
,其中包含 Program.exe
(我没有代码),它在 C:\Shared\
.
中搜索 DLL
如何让这个 Program.exe
在另一个文件夹中搜索 DLL,例如Program\Shared
?
我可以使用 bat
脚本甚至来自 C++ 程序的 windows.h
API。
UPDATE:基于新信息,前提是您无权更改相关程序的源代码,而且该程序已经在搜索对于与包含该程序的文件夹不同的文件夹中的 DLL,则程序很可能使用绝对路径(或下面提到的 API)来加载 DLL,因此您几乎无法执行程序搜索在您选择的另一个文件夹中(缺少破解 program/altering EXE 文件)。
[原答案]
如果程序静态链接 DLL,DLL 将在程序中的任何代码运行之前由 OS 自动加载,因此文件夹将需要成为 OS 的 DLL search path.
如果程序动态加载代码中的DLL,程序代码启动后会加载DLL运行,所以程序可以直接加载DLL使用绝对路径,否则它可以使用 Win32 SetDllDirectory()
or AddDllDirectory()
函数将文件夹添加到 OS 的搜索路径。
假设我有一个文件夹 Program
,其中包含 Program.exe
(我没有代码),它在 C:\Shared\
.
如何让这个 Program.exe
在另一个文件夹中搜索 DLL,例如Program\Shared
?
我可以使用 bat
脚本甚至来自 C++ 程序的 windows.h
API。
UPDATE:基于新信息,前提是您无权更改相关程序的源代码,而且该程序已经在搜索对于与包含该程序的文件夹不同的文件夹中的 DLL,则程序很可能使用绝对路径(或下面提到的 API)来加载 DLL,因此您几乎无法执行程序搜索在您选择的另一个文件夹中(缺少破解 program/altering EXE 文件)。
[原答案]
如果程序静态链接 DLL,DLL 将在程序中的任何代码运行之前由 OS 自动加载,因此文件夹将需要成为 OS 的 DLL search path.
如果程序动态加载代码中的DLL,程序代码启动后会加载DLL运行,所以程序可以直接加载DLL使用绝对路径,否则它可以使用 Win32 SetDllDirectory()
or AddDllDirectory()
函数将文件夹添加到 OS 的搜索路径。