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

标签 windows dll win32-process

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

  <product_home>/bin/<DLL is here>
              |
              |----/configdir/configfile
              |----/lib/<java jarfiles>

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

我的 Windows 应用程序预加载了一个特殊的 DLL。我需要在进程中找到加载的 DLL 的实际路径,并使用它来设置“HOME”变量。这将用于其余的处理。当计算机上存在多个版本的 dll 时,使用外部设置的环境变量有时会失败。对我来说,只要 DLL 能够获取实际加载的位置,它就可以找出自己的“product_home”。

DLL本文Get Your DLL's Path/Name提供了一种这样的方法-(尚未尝试成功。生成的exe崩溃)。这是正确的方法吗?

最佳答案

要么我不明白您的需求,要么您提到的链接不是您需要的。如果我理解正确的话,您希望获得进程加载的某个 DLL 的完整路径。因此,假设 DLL 是“kernel32.dll”,您想要获取“c:\windows\system32\kernel32.dll”。如果我错了,请纠正我。

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

HMODULE hModule = GetModuleHandle(_T("kernel32.dll"));
TCHAR dllPath[_MAX_PATH];
GetModuleFileName(hModule, dllPath, _MAX_PATH);

为简洁起见,省略了失败检查 - 了解有关 GetModuleHandle 的更多信息和 GetModuleFileName .

关于windows - 如何在 Windows 进程(XP/Windows 7)中找到加载的 DLL 的实际路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6705531/

相关文章:

java - 如何在 Windows 中使用 Java(ffmpeg 等)快速截取桌面屏幕截图?

c# - DLL 引用之间的区别?和用途?

c++ - 有没有办法让 CreateProcess 创建的进程在另一个窗口中打开?

C++、C2447 '{' : missing function header (old-style format list? )、win32 和 long

c++ - 如何确定 POINT 是否在按钮区域内

windows - Windows 8.1 后 WinAPI 弃用

c++ - 如何使用 C++ 将网站设置为 IE、Firefox、Chrome 和 Safari 的主页?

winapi - 在 Windows 7 上加载视频处理器 MFT 时出现 "Class not registered"

c# - 在 C++ DLL 中包含 Lua 使其与 C# 不兼容?

c++ - 开发一个应用程序以重启另一个应用程序