【问题标题】:C++ move dll files from root to sub folderC ++将dll文件从根目录移动到子文件夹
【发布时间】:2011-02-10 15:05:45
【问题描述】:

我正在用 Visual C++ 编写程序。该程序依赖于一些我不想放在 system32 中的 dll 文件。现在 dll 文件与我的 .exe 位于同一文件夹中,但我想将它们移动到子文件夹中。问题是,如果我移动文件,我的应用程序将无法启动并出现以下错误消息:


MyProgram.exe - 无法找到组件

此应用程序无法启动,因为找不到 myDll.dll。重新安装应用程序可能会解决问题。


我之前也遇到过同样的问题,如果找到了解决方案,其中包括向注册表添加一些内容,但我忘记了它是如何工作的,现在我再也找不到指南了。

有人可以帮帮我吗?

【问题讨论】:

  • 需要将dll放在子目录中听起来很可疑。介意说出原因吗?
  • 我不需要将 dll 文件放在子文件夹中,我只是不喜欢将它们与我的程序放在同一个文件夹中,因为其中大约有 15-20 个 dll 文件我认为程序文件夹看起来很乱

标签: c++ visual-c++ dll components


【解决方案1】:

解决这个问题的方法不止一种。正如其他提到的,您可以在注册表中修改应用程序的搜索路径。有时,您没有权限写入注册表,或者由于其他原因无法写入,则可以显式设置dll路径,WinAPI函数为SetDllDirectory,参见MSDN

【讨论】:

  • 调用 SetDllDirectory 显然需要进程正在运行。这意味着隐式链接的 DLL 不能使用此方法位于奇怪的路径中。
  • 我一直在研究这个函数,但如果我理解正确的话,这个函数只适用于延迟加载的 dll 文件,而我的不是
【解决方案2】:

听起来您在使用 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths 键。有关完整信息,请参阅here。简而言之,一个名为Path 的字符串指向一个DLL 搜索路径。例如,如果您的应用程序被称为“MyApp”,那么这样的 .reg 文件就可以解决问题:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppPaths\MyApp.exe]
@="C:\\Program Files\\MyCompany\\MyApp\\MyApp.exe"
"Path"="C:\\Program Files\\MyCompany\\MyApp\\DLLs"

【讨论】:

    【解决方案3】:

    我相信这是您正在寻找的文章:

    http://www.codeguru.com/Cpp/W-P/dll/article.php/c99

    现在每个应用程序都可以在以下键下存储自己的注册表路径:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App 路径

    使用应用程序路径,为您的应用程序设置一个密钥,使用上面示例中的 ONE.EXE:

    HKEY_LOCAL_MACHINE...\CurrentVersion\App Paths\ONE.exe

    将(默认)值设置为可执行文件的完整路径,例如:

    C:\Program Files\ONE\ONE.exe

    添加一个名为 Path 的子键

    【讨论】:

    • 正确,就是这篇文章。谢谢,找了半天也没找到!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多