如何在Windows进程中找到加载的DLL的实际路径(XP/Windows 7)

Jay*_*yan 2 windows dll win32-process

我们为其他应用程序创建一个DLL,以加载和使用应用程序中的某些功能.DLL依赖于加载它的实际路径.

  <product_home>/bin/<DLL is here>
              |
              |----/configdir/configfile
              |----/lib/<java jarfiles>
Run Code Online (Sandbox Code Playgroud)

它需要product_home位置来读取配置文件和加载jar文件等

我的Windows应用程序会扩展一个特殊的DLL.我需要在进程中找到加载的DLL的实际路径,并使用它来设置"HOME"变量.这将用于其余的处理.当机器上存在多个dll版本时,使用外部设置的环境变量会失败一段时间.对我来说,看起来像DLL可以找到自己的"product_home",只要它可以获得实际加载的位置.

DLL本文获取DLL的路径/名称提供了一种这样的方式 - (但是要成功尝试它.生成的exe崩溃).这是正确的方法吗?

era*_*ran 6

要么我不理解你的需要,要么你提到的链接不是你需要的.如果我理解正确,您希望获得该进程加载的某个DLL的完整路径.所以,假设DLL是"kernel32.dll",你想得到"c:\ windows\system32\kernel32.dll".如果我错了,请纠正我.

如果这是你想要的,最简单的方法是:

HMODULE hModule = GetModuleHandle(_T("kernel32.dll"));
TCHAR dllPath[_MAX_PATH];
GetModuleFileName(hModule, dllPath, _MAX_PATH);
Run Code Online (Sandbox Code Playgroud)

为简洁省略了失败检查 - 阅读有关GetModuleHandleGetModuleFileName的更多信息.