依赖项分析器卡住了

37

当我的.xll插件在客户端PC上加载时,我遇到了问题。它会在Excel启动时崩溃(可能是由于缺少依赖的dll文件)。

我知道可以使用依赖项查找器的Profile模式来查找运行.exe文件时加载了哪些dll文件。但当我尝试对Excel进行分析时,依赖项查找器会挂起,我无法找出原因。

在命令窗口中,我运行了以下命令:

C:\Program Files (x86)\Windows Kits\8.1\Tools\x86>start /wait depends.exe /c /f:1 /pb /pp:1 /pg:1 /oc:d:\temp\Log.txt "C:\Program Files (x86)\Microsoft Office\Office14\excel.exe"

但它一直卡住。

enter image description here

我使用的是依赖项查找器版本2.2.9600 x86,Windows 8.1 x86,office 2010 x86。

我还尝试在干净安装了Win 8.1和Office 2010的虚拟机上进行设置,但在加载.xll时,XL不会崩溃。

我在另一台机器上使用 Windows 10 x64,Office 2013 x64 和 Dependency Walker x64。我可以对 Excel 进行性能分析。
注意:最终我使用了Sysinternals进程管理器替代。它有点复杂但是可以使用。

你也可以尝试使用“进程监视器(Process Monitor)”和/或“WinDbg”,以查看崩溃发生前正在加载或尝试加载的内容。客户端机器是否安装了正确的CRT?这是你的插件编译所依赖的CRT吗? - Chris O
我会尝试并告诉你。 - Damian
关于:https://dev59.com/Vmoy5IYBdhLWcg3wA5aC - kirbyfan64sos
3
无论我使用“Dependency Walker”打开哪个.exe或.dll文件,它都会挂起(在Windows 10下)。据我所记,在Windows 7下它可以正常工作。 - hfrmobile
3个回答

47

我目前使用的是Windows 10版本1809,无论我用哪个dll依赖检查器depends.exe都会卡住。 depends 的首页上说:“Dependency Walker 可以运行在Windows 95、98、Me、NT、2000、XP、2003、Vista、7和8上”,因此我猜它不被支持。

试试Dependencies——一个开源的现代化依赖性检查器,我用它很好用。


我也没问题,谢谢。 - Paul Sanders

19
重新配置模块搜索顺序。尝试禁用所有项,除了KnownDLLs和应用程序目录,然后打开文件以进行检查。 Dependency Walker构建了非常大的子依赖列表,GUI元素在此操作上挂起 :( 在此输入图片描述

3
2022年:+1,这应该是“被接受的答案”!无需安装。不需要开源替代品。一旦按照上述配置进行配置,DW将像在这些问题发生之前我记得的那样快速打开。你值得拥有一个饼干! :) - user585968
如果我删除对“系统的“PATH”环境变量目录”的搜索,Depends.exe就不会挂起。如果我删除上面显示的其他内容,那么Depends.exe无法解析C:\Windows\System32中的常见DLL,例如VCRUNTIME140.DLL,因此它会产生太多的误报。我更喜欢新的开源Dependencies实用程序,因为它是维护的、更快速的,并且只需一次性工作即可正常工作。如果Depends.exe现在甚至无法搜索PATH,那么就该退役了。 - Bill Menees
1
很遗憾,当您退出工具时,似乎无法保存此设置。 - undefined

11

微软一直在向Windows OS API库中添加模块化、版本控制和间接引用的功能。1这项工作始于Windows 7,但只有在最近的Windows 10版本中,这一举措才影响到了一些核心的win32/kernel库,这些库基本上是所有传统Windows二进制文件链接和使用的。

朴素的依赖关系查找器将为它们自己创建一个组合式爆炸图,如果没有一些额外的逻辑来短路这个间接引用层,或者限制图搜索的深度,使它在某个特定深度上按需触发。如果您的程序相对简单,depends.exe最终会唤醒并为您呈现依赖关系图,但这可能需要几个小时。

我不知道depends.exe的作者是否打算更新它,但与此同时,正如安德鲁在他的答案中指出的那样,GitHub上的lucasg/Dependencies项目似乎没有遇到同样的问题。

另请参阅此SO帖子:Dependency Walker: missing dlls


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接