我正在用visual c ++制作一个程序。该程序依赖于一些dll文件,我不想将它们放在system32中。现在dll文件与我的.exe位于同一文件夹中,但我想将它们移动到子文件夹。问题是,如果我移动文件,我的应用程序无法启动并出现此错误消息:
MyProgram.exe - 无法找到组件
此应用程序无法启动,因为找不到myDll.dll。重新安装应用程序可能会解决问题。
之前我遇到过同样的问题,如果找到了解决方案,其中包括向注册表添加内容,但我忘了它是如何工作的,现在我再也找不到指南了。
有人可以帮帮我吗?
答案 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
的子键