文章目录
一、问题是什么
1、背景:
某个工程由于没有及时替换新版本的依赖库,导致某些功能受限。然而,要手动找出依赖了哪些库步骤比较繁琐,因此,这里尝试用批处理脚本来找到所需的依赖。
2、需求实例:
在一个目录下找出依赖了LIBEAY32.dll、SSLEAY32.dll的文件(如.exe、.dll文件)。
输入: 待检测的目录路径
输出:依赖了 LIBEAY32.dll、SSLEAY32.dll 的文件的路径
二、如何解决(思路分析)
1. 获得依赖库
使用Vistual Studio 提供的 dumpbin.exe 工具,可以分析依赖库
dumpbin.exe /dependents xxx.dll
利用辅助txt文件 D:\dep_folder_dependent_dll_log.txt 保存dumpbin.exe分析结果
2. 遍历依赖库中是否有指定依赖名(LIBEAY32.dll、SSLEAY32.dll)
3. 输出包含指定依赖名路径名
三、代码
@echo off
echo use: check_dep + prased_dll directory + dumpbin directory
SETLOCAL ENABLEDELAYEDEXPANSION
::echo pre-treatment:set prased_dll + dumpbin dir
set /p dll_path=dll directory:
set /p dumpbin_path=dumpbin directory:
echo Step1. set dumpbin root: %dumpbin_path%
echo Step2. set dll file path: %dll_path%
::echo create help_file
if exist
""D:\dep_folder""
rmdir /S /Q ""D:\dep_folder""
::echo dep_folder is helped_file
md "D:\dep_folder">nul
cd %dll_path%
echo Step3. phrase dll
cd /d "%dll_path%"
::echo %cd%
set str1=LIBEAY32.dll
set str2=SSLEAY32.dll
for /r %%a in (*.*) do (
::echo %%a is input
"%dumpbin_path%\dumpbin.exe" /dependents "%%a">D:\dep_folder\_dependent_dll_log.txt
for /f %%i in (D:\dep_folder\_dependent_dll_log.txt) do (
::echo %%i
if %%i equ %str1% if %%i neq %str2% echo %%a
if %%i equ %str2% if %%i neq %str1% echo %%a
)
)
::echo post-treatment:rmdir helped_file
if exist "D:\dep_folder" rmdir /S /Q "D:\dep_folder"
四、如何使用脚本
1. 在任意目录下使用cmd命令行打开
2. 弹出 “dll directory:” ,提示输入待检测目录,如(C:\Program Files (x86)\XXX\VSM Servers\SYS)
3. 弹出 “dumpbin directory:”,提示输入 dumpbin.exe 所在目录,如(D:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\bin)