MSVCR100D.DLL和依赖性walker

cs0*_*815 1 c++ assemblies visual-studio-2010 .net-assembly

我把MSVCR100D.DLL放到c:\ windows\system32文件夹中,但依赖者walker仍在抱怨它丢失了.有任何想法吗?

Han*_*ant 6

Dependency walker在很长一段时间内没有更新.我认为作者只是放弃了试图跟上Windows开发的步伐.特别是解决并排清单查找规则是一个非常难以解决的问题.SetDllDirectory()无法静态解析.关于延迟加载的DLL并不是很聪明,它对转发器的DLL导出一无所知.你几乎总是得到一个实际上没有丢失的丢失的DLL的大清单.

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

如果你还有问题,那么SysInternals的ProcMon是更好的工具.它生成的跟踪显示了它查找DLL的确切位置.

  • 现在有一个部分用 C# 完成的开源重写,见“**Dependencies.exe**”:https://github.com/lucasg/Dependencies。测试印象:**有点测试版**,但它声称可以处理 API 集和 SxS(Dependency Walker 中没有)。**我还没有对它进行足够的测试来真正推荐它** - 但它是开源的,因此可以检查。看来您需要从源代码(目前)自己构建它。是的,在我看来,整个并行概念在很多方面都是 dll-hell 以全新的形式再次出现。 (2认同)