C ++将dll文件从root文件移动到子文件夹

时间:2011-02-10 15:05:45

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

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


MyProgram.exe - 无法找到组件

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


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

有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

听起来像是在 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"

答案 2 :(得分:0)

我相信这是你要找的文章:

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

  

现在,每个应用程序都可以在以下密钥下将注册表存储在自己的路径中:

     

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths

     

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

     

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

     

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

     

C:\ Program Files \ ONE \ ONE.exe

     

添加名为Path

的子键