Batch file 是否可以从批处理文件或cmd脚本向DLL搜索路径添加目录?
MSDN表示,该函数可用于将目录插入到。可以通过批处理文件或cmd脚本访问此函数吗 我们的目标是在%WINDIR%等中预先存在的旧dll之前找到我们的dll开发版本,而不必为此编写程序Batch file 是否可以从批处理文件或cmd脚本向DLL搜索路径添加目录?,batch-file,cmd,dll,wsh,Batch File,Cmd,Dll,Wsh,MSDN表示,该函数可用于将目录插入到。可以通过批处理文件或cmd脚本访问此函数吗 我们的目标是在%WINDIR%等中预先存在的旧dll之前找到我们的dll开发版本,而不必为此编写程序 提前感谢您的时间和想法。您可以将DLL放置在与可执行文件相同的路径中,首先在%WINDIR%之前搜索该路径。无法直接从批处理文件调用SetDllDirectory 但是,您可以在%PATH%变量中插入DLL目录,Windows将在那里找到DLL set PATH=C:\path to your dll;%PATH
提前感谢您的时间和想法。您可以将DLL放置在与可执行文件相同的路径中,首先在%WINDIR%之前搜索该路径。无法直接从批处理文件调用SetDllDirectory 但是,您可以在%PATH%变量中插入DLL目录,Windows将在那里找到DLL
set PATH=C:\path to your dll;%PATH%
目的是为了我们的发展
在安装之前找到的dll的版本
%WINDIR%中预先存在的旧版本
等,而不必编写程序
就为了这个
如果DLL与可执行文件不在同一文件夹中,Windows将在系统路径中指定的文件夹中搜索该文件。因此,您只需将文件夹放在路径的开头
可以使用以下批处理命令执行此操作:
set PATH=c:\MyDLLFolder;%PATH%
set PATH="C:\My DLL Folder";%PATH%
如果路径包含空白,则需要使用以下批处理命令:
set PATH=c:\MyDLLFolder;%PATH%
set PATH="C:\My DLL Folder";%PATH%
但请记住,此路径更改仅对当前控制台会话的路径进行。如果关闭并重新打开控制台,这些路径更改将丢失。要解决dll搜索顺序上的争议(在@jussij的回答中),以下列表来自Microsoft的文档: 如果启用了
SafeDllSearchMode
,则搜索顺序如下:
GetSystemDirectory
函数获取此目录的路径GetWindowsDirectory
函数获取
此目录的路径SafeDllSearchMode
,则搜索顺序如下:
GetSystemDirectory
函数获取此目录的路径李>
GetWindowsDirectory
函数获取此目录的路径李>
这个跳跃在中间。搜索1)调用.exe所在的目录后,Windows搜索2)系统目录,3)16位系统目录,4)Windows目录,5)当前目录,6)最后搜索%path%。请参阅问题中的/DLL搜索路径/链接。您的答案对于EXE、BAT、COM搜索路径是正确的(据我所知)。Matt,这就是为什么我用“如果DLL与可执行文件不在同一文件夹中”来限定我的评论的原因。至于那些愚蠢到将非系统dll放入系统文件夹的人,祝他们好运;)“如果DLL与可执行文件不在同一文件夹中”的限定是正确的,但“您只需将文件夹放在路径的开头”是错误的。在系统和windows目录之后才会搜索路径。为什么要在系统文件夹中放置非系统dll?我从来没有必要这样做,甚至会说这是一件非常愚蠢的事情。我一直使用这种方法,它从未让我失望。只需将系统文件夹留给系统,一切正常;)