【发布时间】:2010-10-05 19:36:11
【问题描述】:
MSDN 说函数SetDllDirectory() 可用于将目录插入DLL Search Path。是否可以从批处理文件或 cmd 脚本访问此函数,可能通过 cscript 使用?
我们的目标是在 %WINDIR% 等中的预先存在的旧版本之前找到我们的开发版本的 dll,而无需为此编写程序。
提前感谢您的时间和想法。
【问题讨论】:
标签: batch-file cmd dll wsh
MSDN 说函数SetDllDirectory() 可用于将目录插入DLL Search Path。是否可以从批处理文件或 cmd 脚本访问此函数,可能通过 cscript 使用?
我们的目标是在 %WINDIR% 等中的预先存在的旧版本之前找到我们的开发版本的 dll,而无需为此编写程序。
提前感谢您的时间和想法。
【问题讨论】:
标签: batch-file cmd dll wsh
您可以将 DLL 放在与可执行文件相同的路径中,在 %WINDIR% 之前首先搜索该路径。无法直接从批处理文件中调用 SetDllDirectory。
但是,您可以将 DLL 目录插入到 %PATH% 变量中,然后 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%
但请记住,此路径更改仅针对当前控制台会话的 PATH。如果您关闭并重新打开控制台,这些路径更改将会丢失。
【讨论】:
为了解决关于 dll 搜索顺序的争议(在 @jussij 的答案中的 cmets 中),这里是列表,来自 Microsoft 的文档:
如果启用SafeDllSearchMode,则搜索顺序如下:
GetSystemDirectory函数获取该目录的路径。GetWindowsDirectory 函数获取
该目录的路径。如果SafeDllSearchMode被禁用,搜索顺序如下:
GetSystemDirectory 函数获取该目录的路径。 GetWindowsDirectory 函数获取该目录的路径。 【讨论】: