同事开发了一个小工具,为了避免使用前 必须安装 vs2010的 VC++10库,于是试着将 运行库的DLL全部收集起来,记录一下具体的步骤:
首先找到 VC++运行库的下载地址:https://learn.microsoft.com/zh-CN/cpp/windows/latest-supported-vc-redist
找一个没有安装过 Visual Studio 2010 (VC++ 10.0) 的系统,使用 SysinternalsSuite 套件中的 Procmon (地址:https://learn.microsoft.com/zh-cn/sysinternals/ ),检测安装过程,将 Procmon 的过滤规则 增加2条规则:
Path --> contains --> .dll --> include
Process Name --> is --> msiexec.exe --> include
点击add,点击OK,开始记录 msiexec.exe 往系统里写入的DLL文件。
此时正常安装 Visual Studio 2010 (VC++ 10.0) 运行库,将 promon记录的内容导出为 CSV。
使用Excel打开,删除:Time of Day、Detail 、PID 这3列,然后筛选:Operation列,只保留:CreateFile、WriteFile 这两个操作,在“数据”选项卡中,点击“删除重复项”按钮,这时候我们来看剩下的内容:
Result列,开始文件都是:NAME NOT FOUND,后面WriteFile都成功了,那这些文件就是 VS2010写入的DLL(为了截图更清晰,我删掉了一些其他语言的DLL),最后,拼接一个批处理命令,将安装的DLL拷贝出来。
当程序运行过程中,提示缺少某个DLL,我们就将需要的DLL文件,放到程序的根目录。
经过验证,发现同事的程序需要包含3个DLL文件:msvcr100.dll、msvcp100.dll、msvcr110.dll(Visual Studio 2012 (VC++ 11.0)),就可以绿色运行,无需安装VC++运行库。
陈树树 2023.7.25