标签: setdlldirectory

添加自定义DLL搜索路径@ application startup

我正在绞尽脑汁试图想出一个DLL加载问题的优雅解决方案.我有一个静态链接到其他加载DLL的lib文件的应用程序.我没有直接加载DLL.我想在可执行文件所在的文件夹之外的另一个文件夹中安装一些DLL.像%working_folder%\ dlls这样的东西 - 我宁愿在我的%working_folder%中没有几十个(是...几十个)DLL .

我正在尝试开发一些主要应用程序的一部分,它将调整搜索路径@ startup.我遇到的问题是这个新的自定义DLL路径不在系统搜索路径中.当我启动应用程序时它崩溃(STATUS_DLL_NOT_FOUND)因为必要的DLL不在适当的位置.我想做的是检查@ startup是否这个新的自定义DLL文件夹在进程环境变量搜索路径中,如果没有添加它.问题是,应用程序尝试在应用程序执行一行代码之前加载所有这些DLL.

我该如何解决?我考虑过编写一个首先启动的帮助应用程序,适当调整环境变量,然后通过CreateProcess启动主应用程序.这将有效我确信它,但它使开发人员的事情变得困难.当他们调试主应用程序时,他们不会首先启动帮助应用程序 - 而不是他们甚至可以做到这一点.

我已经尝试过注册表应用程序路径功能但没有成功.像以前一样鸡和鸡蛋问题.

我能在这做什么?

dll path setdlldirectory

9
推荐指数
1
解决办法
1万
查看次数

如何在Delphi中调用WinAPI函数SetDllDirectory()?

我想通过访问当前工作目录来防止加载恶意DLL,如http://msdn.microsoft.com/en-us/library/ff919712(VS.85).aspx中所述.

在我们的C++应用程序中实现的解决方案是对SetDllDirectory("")进行WinAPI调用,这将有效地从Windows DLL加载搜索路径中删除当前工作目录.但是,似乎这个解决方案不适用于我们的Delphi应用程序,因为SetDllDirectory()函数不存在.

在Delphi中是否有与SetDllDirectory("")相同的调用?谢谢!

delphi security dll winapi setdlldirectory

6
推荐指数
2
解决办法
4154
查看次数

SetDllDirectory 不级联,因此无法加载依赖项 DLL

我从目录中执行一个 exe,比如“C:/test”
DLL 位于目录“C:/test/dlls”中,因此,在这个 exe 中,我调用:

SetDllDirectory("C:/test/dlls");
Run Code Online (Sandbox Code Playgroud)

然后我打电话

lib1 = LoadLibrary("lib1.dll)
Run Code Online (Sandbox Code Playgroud)

ptrType pr = (ptrType) ::GetProcAddress(lib1, "test")
Run Code Online (Sandbox Code Playgroud)

lib1.dll需要目录“C:/test/dlls”中的其他 DLL,但是当我执行pr(...)got from 时GetProcAddress,出现错误:

“程序无法启动,因为您的计算机缺少 lib2.dll。尝试重新安装程序以解决此问题。”

如果我移动lib2.dll到“C:/test”,它会被找到。这意味着这SetDllDirectory()仅对加载第一个 DLL 有效。

有谁知道为什么以及如何解决它?

windows dll winapi setdlldirectory

2
推荐指数
1
解决办法
1466
查看次数

标签 统计

dll ×3

setdlldirectory ×3

winapi ×2

delphi ×1

path ×1

security ×1

windows ×1