【发布时间】:2015-12-02 13:55:11
【问题描述】:
我最近在 VisualStudio 上构建了一个项目。我在 bin 文件夹中有一个可执行文件,我将所有依赖项 x64 DLL 放在 C:\Windows\System32 中,并将所有 x32 DLL 放在 C:\Windows\SysWOW64 中
当我执行我的可执行文件时,我收到一条错误消息This program can't start because foo.dll is missing from your computer。
我尝试在 Cygwin 上使用 ldd.exe 获取依赖关系,但我没有看到对 foo.dll 的任何引用。我也尝试从 PowerShell Start-Process -PassThru sample.exe 执行,但我仍然收到相同的错误消息。
Windows 可执行文件在哪里寻找 DLL?
我了解到,Windows 可执行文件会按特定顺序查找其依赖项:
- 在本地文件夹中
- 在 System32 中
- 在 %PATH% 中
我还了解到,如果我的 DLL 位于 System32 中,我可能需要使用 regsvr32.exe 来注册它。
这个故事的真实情况是什么?
【问题讨论】:
-
foo.dll 是 DLL 的实际名称吗?如果不是,请提供实际名称,因为它可能与众所周知的 DLL 冲突。 DLL 是您解决方案的一部分还是第三方代码?你运行的是 64 位版本的程序还是 32 位版本的?您运行的是哪个版本的 Windows?为什么不将 DLL 与可执行文件放在同一目录中? DLL 是 COM 服务器吗?
-
您确定当您将文件复制到系统目录时,它们实际上最终会出现在那里,而不是在某个重定向的位置?如果您尝试从 Visual Studio 或从标准命令提示符而不是 cygwin 运行程序,您会得到不同的结果吗?
-
是的,我很确定我将 32 位 DLL 放入 SysWOW64 并将 64 位 DLL 放入 System32。我可以提供 DLL 名称(mkf3412.dll)吗,但它对您没有帮助,因为它是由一些同事开发的。
标签: c windows visual-studio-2010 dll