【问题标题】:MSVCR100D.DLL and dependency walkerMSVCR100D.DLL 和依赖遍历器
【发布时间】:2013-12-02 19:11:49
【问题描述】:

我将 MSVCR100D.DLL 放入 c:\windows\system32 文件夹,但依赖项walker 仍然抱怨它丢失了。有什么想法吗?

【问题讨论】:

  • 哪个 Windows 版本?
  • 这是一个windows web server 2008 r2 64位,但dll是32位
  • 应用程序也是 32 位的?
  • 是的,整个解决方案是 32 位构建的

标签: c++ visual-studio-2010 assemblies .net-assembly


【解决方案1】:

Dependency walker 很久没有更新了。我认为作者只是放弃了尝试跟上 Windows 开发的步伐。特别是解决并行清单查找规则是一个非常难以解决的问题。 SetDllDirectory() 无法静态解析。它对延迟加载的 DLL 不是很聪明,而且它对作为转发器的 DLL 导出一无所知。您几乎总是会得到一个实际上并没有丢失的丢失 DLL 的大列表。

在 64 位操作系统上使用 32 位版本也不能正常工作,您可能在 msvcr100d.dll 的情况下出错。对于 32 位可执行文件,必须将其复制到 c:\windows\syswow64,而不是 system32。您真的希望支持 msvcrt 版本 10 及更高版本的本地部署。换句话说,只需将 DLL 复制到与 EXE 相同的目录中。将它放在 Windows 系统目录中会使您暴露在太多的 DLL 地狱中,而不仅仅是选择错误的系统目录。

如果您仍然有问题,那么 SysInternals 的 ProcMon 是更好的工具。它生成的跟踪显示了它在哪里寻找 DLL。

【讨论】:

  • 谢谢,我会检查一下。
  • 如果您仅限于使用 Dependency Walker,请确保使用与您的项目构建设置匹配的 x86 或 x64 版本。
  • 现在有一个开源重写部分在 C# 中完成,见“Dependencies.exe”:github.com/lucasg/Dependencies。测试印象:有点 beta-ish,但它声称可以处理 API 集和 SxS(在 Dependency Walker 中缺失)。 我没有对其进行足够的测试以真正推荐它 - 但它是开源的,因此可以检查。看来您需要从源代码自己构建它(现在)。是的,在我看来,整个并排概念在很多方面都是 dll 地狱以全新的形式再次出现。
  • Hans,在 a previous comment 中,您提到使用 Visual Studio 的调试器模块视图 来确定依赖关系。当您拥有源代码访问权限时,这是一个很好的提醒。谢谢!现在,我一直在努力寻找一些测试代码来确定这个视图在the Dependency Walker help file 中描述的依赖关系中显示了什么样的依赖关系。但也许你会从头顶上知道这一点?也许我应该把它变成一个真正的问题而不仅仅是评论?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
  • 1970-01-01
  • 2014-03-23
  • 2020-06-19
  • 1970-01-01
相关资源
最近更新 更多