使用Dependency Walker和Process Explorer搞定第三方软件release版本发布问题

Posted IT老张

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Dependency Walker和Process Explorer搞定第三方软件release版本发布问题相关的知识,希望对你有一定的参考价值。

       就今天使用第三方工具PeViewer.exe遇到的release版本发布问题,简单地讲一下如何使用Dependency WalkerProcess Explorer这两个常用的软件。文中内容比较简单,旨在介绍工具如何使用,给新人们提供一个参考!

1、问题描述

       今天同事那边启动我们的软件报错了,怀疑是底层路版本不对导致的。于是将之前从网上下载的查看PeViewer工具发给她,结果她那边启动这个工具也报错,如下所示:

PeViewer工具可以查看二进制文件的PE信息,我们平时主要用来查看dll或exe文件的时间戳,确定是否是指定的版本。

       对于老程序而言,这种问题很简单,这是典型的release版本发布时库缺失问题。但这个工具在我机器上运行没问题,应该是我系统目录中有该工具依赖的库,而同事机器上没有,所以同事那边运行出错。

       这是软件开发新手经常容易犯错的地方,发布release版本时应该将依赖的运行时库和MFC库都一起打包带上。这个工具虽然文件不全,但是挺好用的,决定在我机器上找到依赖的三个库,放到PeViewer.exe同级目录下,PeViewer.exe就可以正常使用了。

2、使用Dependency Walker查看PeViewer.exe依赖了哪些dll库文件

       于是使用Dependency Walker打开PeViewer.exe文件,看看该工具都依赖哪些库。打开后发现,系统库之外主要依赖VS2003版本的运行时库和MFC库:

 msvcp71.dll、msvcr71.dll、mfc71.dll。

Dependency Walker主要用来查看库的依赖关系,以及库中的导出导入接口等信息

msvcp71.dll、msvcr71.dll、mfc71.dll这几个库对应的是VS2003,库编号与VS版本的对应关系如下:

        那如何找到这三个库在我机器上的路径呢?很多人可能会说,拿文件名直接在磁盘上搜索啊!也可以使用快速查找工具Everything搜索的!这里推荐大家使用免费的快速搜索工具Everything,很好用,搜索速度比磁盘上搜索要快的多!我们可以使用Process Explorer工具来查得文件路径信息。

3、使用Process Explorer找到PeViewer.exe依赖的库

       其实,有时库名称一样,版本可能不一样。可以将PeViewer.exe在我机器上跑起来,然后使用Process Explorer工具查看到依赖的库在哪个路径中,直接拷贝过来就好了。

Process Explorer由以下几个用途:

1)可以查看目标进程依赖的库信息,比如库的路径、版本等信息,可以确任动态启动的库有没有启动起来。

2)可以查看目标进程中的线程信息,比如CPU及内存的占用、线程中的函数调用堆栈等。可以使用该工具排查目标进程CPU占用高的问题。

        如果是第一次使用,Process Explorer是看不到目标进程的库列表的,需要点击工具栏一个图标,才能切换出来:

 找到依赖的库条目:

在列表中找到运行时库,右键点击,查看属性:

点击打开文件所在路径,即进入对应路径中拷贝出文件即可。需要的这三个库,都是在系统路径中:

拷贝到PeViewer.exe路径中,打包发给同事,同事那边就能正常运行了。

4、新人发布库时需要了解的注意事项

       新人发布release版本程序时,要留意一下,一定要把依赖的非系统库带上!

       其实发布release时不想带着运行时库和MFC库,可以选择在工程属性中配置使用静态运行时库和静态MFC库就好了,相关配置截图如下:

5、最后

         使用PeViewer.exe工具查看目标二进制文件的时间戳的入口如下所示:

至于Dependency Walker和Process Explorer这两个工具软件,比文中用到的功能大的多,后面我们会详细讲解这两个工具软件的功能和应用场景。

以上是关于使用Dependency Walker和Process Explorer搞定第三方软件release版本发布问题的主要内容,如果未能解决你的问题,请参考以下文章

关于DLL调试的两个工具(dependency walker和dumpbin.exe)

Dependency Walker:缺少 dll

Dependency Walker 报告 IESHIMS.DLL 和 WER.DLL 丢失?

C++异常分析使用Process Explorer和Dependency Walker定位dll库动态启动失败的问题

使用Dependency Walker查看dll/so库的依赖关系

使用Dependency Walker查看dll/so库的依赖关系