首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DLL依赖问题/ SetDLLDirectory

DLL依赖问题/ SetDLLDirectory
EN

Stack Overflow用户
提问于 2011-01-20 04:57:10
回答 4查看 5.2K关注 0票数 2

我有以下情况,无法想出任何好的解决方案。

我在C:\ProgFiles中安装了一个C++应用程序(app.exe)。它需要一堆DLL,我将它们安装在C:\ProgFiles\MyApp\bin中。我想把它们放在一个子文件夹中,因为它们太多了。

现在,当我启动app.exe时,需要让Windows知道所需的DLL在哪里。在过去,我使用PATH环境变量来实现这一点,但我不能再这样做了,因为我将使用一个单独的安装程序创建另一个应用程序,该应用程序使用许多具有相同名称的DLL。

我想在应用程序开始时调用SetDLLDirectory -但我忘记了,因为缺少必需的DLL,它在到达那里之前就失败了。

有什么建议吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-20 05:12:25

请参阅微软的this article,其中讨论了DLL搜索路径和相关问题。

特别是,请注意,如果您不将它们放在应用程序的目录中,则当前目录优先,这是一个安全漏洞。

一种解决方案是先使用LoadLibrary (具有完全限定的路径),然后使用GetProcAddress。那将会是一种痛苦。

普通用户是不会去钻研C:\Program Files\YourApp的,除非你有充分的理由不这么做,否则你就应该把它们放在那里。

票数 4
EN

Stack Overflow用户

发布于 2011-01-20 05:07:39

delay load选项与SetDLLDirectory一起使用可能会起作用。延迟加载的DLL由系统在其第一次引用时动态加载。如果使用的是Visual Studio,则可以在链接器输入选项下的项目属性中指定要延迟加载的DLL。有一个用于指定它们的Delay Loaded DLLs字段。否则,可以在链接器命令中指定/DELAYLOAD:mydll.dll

票数 4
EN

Stack Overflow用户

发布于 2011-01-20 05:01:45

我认为您最好将.DLL文件放在与.EXE相同的目录下--可能有很多这样的文件,但是这样做是可行的,而且无论如何都不会有人去查看这个目录,所以我不会太担心这个问题。

如果你依赖PATH,那么你将永远受制于用户的摆布,搞砸了它,并导致额外的支持开销,而这根本没有充分的理由。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4740670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档