Windows下程序打包发布时的小技巧(使用Dependency Walker侦测不理想,改用VS自带的dumpbin则万无一失,还可查看dll导出的函数)

Windows下开发的应用程序在发布时,需要将其依赖的一些动态链接库一起打进安装包里面去。这个时候,快速确定这个程序到底依赖哪些动态链接库变得非常重要。很久以前写过一篇关于Qt程序安装包制作的博客,里面介绍了Dependency Walker这个小工具。但是实际操作起来并不理想,因为Dependency Walker将exe文件依赖的所有动态库以及动态库所依赖的动态库都列出来了。看得你一脸懵逼:

你很难分清楚:倒底哪些DLL是需要打包的,哪些DLL是系统自带的。而作为打包过程中的一个小步骤,我根本不需要知道这么多信息。这个时候,我们需要一个更加简洁明了的工具。dumpbin就是今天要介绍的主角。

二、使用

dumpbin是随Visual Studio一起发布的,在Visual Studio的“本机工具命令行”中就可以直接使用。使用的第一步就是打开Visual Studio的“本机工具命令行”:

这里我选择的是“VS2015 X64本机工具命令提示符”。命令行窗口打开后直接进入到工程目录,输入命令“dumpbin /IMPORTS ReplaceAETemplate.exe > output.txt”:

Duang~~~,所有依赖的DLL项都保存到output.txt里面去了。打开瞧瞧输出内容:

依赖的动态库一项项的非常清晰明了。当然,里面也会列出一些系统的动态库。这些系统动态库在系统安装时就有了,所以不用打包进去。当然就算打包进去也不会有什么害处。这个命令再配合everything这个小工具查找依赖的DLL,简直不要太爽:

三、小结

dumpbin的IMPORTS参数是用来查看程序依赖的其他动态库的,这对于可执行程序exe和动态链接库DLL都是适用的。EXPORTS则适用于DLL查看其导出的函数接口:

结果照样重定位到output.txt中去了。这是因为如果直接在命令行中输出,前面的内容可能会被截断,导致内容看不完整。

从上面红框中可以看出,UniversalBlender.dll这个动态链接库导出了这么一些函数:capabilityAssessment, initializeDevice, runImageBlender等。

http://www.cnblogs.com/csuftzzk/p/windows_application_distribution.html

时间: 2025-01-19 23:53:44

Windows下程序打包发布时的小技巧(使用Dependency Walker侦测不理想,改用VS自带的dumpbin则万无一失,还可查看dll导出的函数)的相关文章

Qt5在程序打包发布时遇到的问题和解决方法

近期刚刚学会用qml写QT程序,感觉QML写界面真的是要好很多的,尤其是在写一些移动端的应用的时候. 最近在打包发布程序的时候遇到些问题,已经完美解决,希望给遇到同样问题的Qter一些参考. 以前在打包Qwiget的程序的时候,一般是在编译release版本后,直接点击exe文件,把提示缺少的dll文件放在一起即可.但是这次直接点击exe文件后,提示的是0xc000007b错误代码. 在网上搜索解决方案后决定采用http://tieba.baidu.com/p/3730103947 中提到的wi

C#windows应用程序打包(VS2010+SQLServer2008)

C#windows应用程序打包(VS2010+SQLServer2008) 开发环境:VS2010+SQL Server 2008 操作系统:win7_32bit 旗舰版 开发语言:C# 项目名称:学生寄宿管理系统 下面开始介绍:如何给windows应用程序打包? 第一步: 打开VS2010,打开你要打包的项目,然后右击"解决方案",”添加“,"新建项目",弹出如下图所示界面: 点击”安装和部署“左边的三角形,选择下面的”Visual studio Installe

C# windows应用程序打包 (VS2010+SQL Server 2008)

作者 : 飘渺菌 原文地址:http://blog.csdn.net/qingdujun/article/details/37563661 开发环境:VS2010+SQL Server 2008 操作系统:win7_32bit 旗舰版 开发语言:C# 项目名称:学生寄宿管理系统 下面开始介绍:如何给windows应用程序打包? 第一步: 打开VS2010,打开你要打包的项目,然后右击"解决方案","添加","新建项目",弹出如下图所示界面: 点击

Qt5+opencv程序打包发布

编程环境为win7+QtCreator5.6+opencv3.0,总结,程序打包发布的方法: 第一步:使用windeployqt(转自http://tieba.baidu.com/p/3730103947,感谢楼主分享) Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll, 如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行. 因此 Qt 官方开发环境里自带了一个工具:windeployqt.exe. 以官方 Qt 5.4.0+MinG

如何给windows窗体程序打包成一个安装包

http://blog.csdn.net/xyy410874116/article/details/6341787 给windows窗体程序打包成一个安装包:具体操作在:http://hi.baidu.com/415210413/blog/item/15b9e0351cb69b5b241f141e.html 1 新建安装部署项目 打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点击确定. 2 安装向导 关闭后打开安装向导,点击下一步,或者直接点击完成

windows下erlang打包镜像启动

在linux环境下,erlang通过systools:make_script("",[])和systools:make_tar()命令生成镜像包,先安装镜像包,安装镜像包的过程,即通过替换erl.src中的路径,然后重新输出到erl完成,继而通过erl -sname cache -boot ../releases/0.1.0/start完成相关应用的启动.而在windows下,打包后要想移植到其他电脑上能够运行,需要经过以下两步: 第一.修改erts-5.9.1/bin/erl.ini

清除在Windows下访问共享文件夹时的登录信息

清除在Windows下访问共享文件夹时的登录信息 在实际工作中,经常需要访问局域网内其他机子上的共享文件夹,例如\\192.168.1.100\d$ , 首次访问时,需要输入用户名和密码才可以进入,即使没有勾选”保存密码”选项,下次登录时也会直接进入,虽然这个功能方便实用,但是当需要切换到另外 一个账号时,就不知所措了. 那么:如何才能清除本机Windows环境下访问这些共享文件夹时的登录信息(用户名和密码)呢? 下面给大家介绍一下. 一.命令行(cmd窗口)操作 当在命令提示窗口输入net u

windows下dbca删除OracleserviceXXX时遇到错误:dim-00014 Cannot open the Windows NT Service Control Manager

windows下dbca删除OracleserviceXXX时遇到错误:dim-00014 Cannot open the Windows NT Service Control Manager  O/S-Error: (OS 5) Access is denied. 截图如下: 经过查询mos,发现如下文章与该报错匹配: How To Create a Service using oradim in Windows Vista (文档 ID 432713.1) 下面截取该mos文章的内容: Ap

DFS遍历图时的小技巧

DFS遍历图时的小技巧 我们通常使用DFS遍历图时,用vis[i]=true;来标记访问过的节点,但是如果要让我们统计图中所有边的长度的话,如果我们还这样做的话,对于非环形图来说,没问题,但是对于环形图来说,就可能访问不到最后一条边,如A-B-C-A,A标记之后就不能统计到C-A了. 这时我们的办法是,每访问一条边后,就把它销毁,然后递归地去DFS时不再以vis[i]==false为条件去递归,而是直接以G[i][j]!=0为条件去递归. 这也是和平时DFS遍历图时有区别的地方,一个小技巧吧.