【问题标题】:Executable built with VS2010 does not find DLLs in System32用 VS2010 构建的可执行文件在 System32 中找不到 DLL
【发布时间】: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


【解决方案1】:

或者,您也可以简单地将 DLL 文件添加到 bin 文件夹中。

【讨论】:

  • 是的,这是一个解决方案,但根据this 信息,可执行文件还应该在System32 上查找。
猜你喜欢
  • 2021-05-21
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
相关资源
最近更新 更多