【问题标题】:How to impose dll files in the current directory?如何在当前目录下强加dll文件?
【发布时间】:2012-08-24 17:21:19
【问题描述】:

此应用程序使用 msado15.dll、msvcr100.dll 和许多 dll。

我发现应用程序没有使用 ProcessExplorer 和 DependencyWalker 在当前目录中加载 msado15.dll 和 msvcr100.dll 文件。

相反,此应用程序从 winsxs 文件夹或不同的 Windows 系统目录加载 dll。

我想阻止它在“非当前目录”中加载 dll 即使没有我复制的 dll 也能正常工作。

我该如何解决这个问题?任何帮助将不胜感激。

提前致谢!

【问题讨论】:

  • “当前目录”是指实际的当前目录,还是包含可执行文件的目录?从当前目录加载 DLL 存在安全问题,因此一些管理员已禁用它。
  • 我的意思是exe文件所在的目录。到时候我会研究这些安全问题。

标签: c++ windows dll mfc


【解决方案1】:

我做了一些研究,实际上很容易。根据this article,您所要做的就是创建一个名为(YourAppName).local 的空文件。这将告诉 Windows 在 exe 文件夹中查找,而不是使用共享组件。

【讨论】:

  • 好吧,我刚刚发现它只适用于 XP,根本不适用于 XP。我想我必须对并排组件和其他东西进行一些研究......
  • 是的,但是如果您的应用程序没有清单,它可以在其他操作系统中工作。您应该尝试删除它(它在链接器选项中)。
【解决方案2】:

将这些 DLL(msado15.dll、msvcr100.dll)的副本放在包含您的 exe 的目录中。 Loader 将首先尝试从包含您的 exe 的目录中加载 DLL。

以下是 Windows 加载程序搜索 DLL 的顺序: [参考:Windows via C-C++ by Jeffrey Richter]

  1. 包含可执行文件的目录
  2. GetWindowsDirectory 返回的 Windows 系统目录
  3. 16 位系统目录,即 Windows 目录下的 System 子文件夹
  4. GetSystemDirectory 返回的 Windows 目录
  5. 进程的当前目录
  6. PATH 环境变量中列出的目录

【讨论】:

    猜你喜欢
    • 2015-10-09
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    • 2020-04-22
    • 2010-10-07
    • 1970-01-01
    • 2011-03-10
    相关资源
    最近更新 更多