批处理bat脚本实现C++依赖检测


一、问题是什么

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)

如下图所示:在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值