【问题标题】:Is it possible to add a directory to DLL search path from a batch file or cmd script?是否可以从批处理文件或 cmd 脚本将目录添加到 DLL 搜索路径?
【发布时间】:2010-10-05 19:36:11
【问题描述】:

MSDN 说函数SetDllDirectory() 可用于将目录插入DLL Search Path。是否可以从批处理文件或 cmd 脚本访问此函数,可能通过 cscript 使用?

我们的目标是在 %WINDIR% 等中的预先存在的旧版本之前找到我们的开发版本的 dll,而无需为此编写程序。

提前感谢您的时间和想法。

【问题讨论】:

    标签: batch-file cmd dll wsh


    【解决方案1】:

    您可以将 DLL 放在与可执行文件相同的路径中,在 %WINDIR% 之前首先搜索该路径。无法直接从批处理文件中调用 SetDllDirectory。

    但是,您可以将 DLL 目录插入到 %PATH% 变量中,然后 Windows 会在那里找到 DLL。

    set PATH=C:\path to your dll;%PATH%
    

    【讨论】:

      【解决方案2】:

      目的是让我们的发展 之前找到的 dll 版本 %WINDIR% 中预先存在的旧版本 等,而无需编写程序 就是为了这个。

      如果 DLL 与可执行文件不在同一文件夹中,Windows 将在系统路径中指定的文件夹中搜索文件。所以你需要做的就是把你的文件夹放在路径的开头。

      您可以使用以下批处理命令执行此操作:

       set PATH=c:\MyDLLFolder;%PATH%
      

      如果您的路径包含空格,您需要使用以下批处理命令:

       set PATH="C:\My DLL Folder";%PATH%
      

      但请记住,此路径更改仅针对当前控制台会话的 PATH。如果您关闭并重新打开控制台,这些路径更改将会丢失。

      【讨论】:

      • 这会在中间跳转步骤。在搜索1)调用.exe所在的目录后,Windows搜索2)系统目录,3)16位系统目录,4)windows目录,5)当前目录,6)现在最后搜索%path%。请参阅问题中的 /DLL Search Path/ 链接。
      • 您的答案是关于 EXE、BAT、COM 搜索路径的正确答案(据我所知)。
      • Matt,这就是为什么我用“如果 DLL 与可执行文件不在同一个文件夹中”来限定我的评论。至于那些愚蠢到将他们的非系统 dll 放入系统文件夹的人,那么祝他们好运;)
      • “如果 DLL 与可执行文件不在同一文件夹中”的限定是正确的,但“您需要做的就是将文件夹放在路径的开头”是一个错误。在系统和 windows 目录之后才搜索 PATH。
      • 为什么你会在系统文件夹中放一个非系统的dll?我从来不需要这样做,甚至会说这是一件非常愚蠢的事情。我一直使用这种方法,它从未让我失望。只需将系统文件夹留给系统,一切正常;)
      【解决方案3】:

      为了解决关于 dll 搜索顺序的争议(在 @jussij 的答案中的 cmets 中),这里是列表,来自 Microsoft 的文档:

      如果启用SafeDllSearchMode,则搜索顺序如下:

      1. 加载应用程序的目录。
      2. 系统目录。使用GetSystemDirectory函数获取该目录的路径。
      3. 16 位系统目录。没有函数获取这个目录的路径,但是搜索到了。
      4. Windows 目录。使用GetWindowsDirectory 函数获取 该目录的路径。
      5. 当前目录。
      6. PATH 环境变量中列出的目录。请注意,这不包括 App Paths 注册表项指定的每个应用程序路径。计算 DLL 搜索路径时不使用 App Paths 键。

      如果SafeDllSearchMode被禁用,搜索顺序如下:

      1. 加载应用程序的目录。
      2. 当前目录。
      3. 系统目录。使用GetSystemDirectory 函数获取该目录的路径。
      4. 16 位系统目录。没有函数获取这个目录的路径,但是搜索到了。
      5. Windows 目录。使用GetWindowsDirectory 函数获取该目录的路径。
      6. PATH 环境变量中列出的目录。请注意,这不包括 App Paths 注册表项指定的每个应用程序路径。计算 DLL 搜索路径时不使用 App Paths 键。

      http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx#standard_search_order_for_desktop_applications

      【讨论】:

        猜你喜欢
        • 2022-01-14
        • 1970-01-01
        • 2011-03-01
        • 2010-11-29
        • 2020-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-28
        相关资源
        最近更新 更多