Windows平台下将exe及其dll封包到新的exe

news2024/11/18 3:33:55

Windows平台下将exe及其dll封包到新的exe

  • 〇、项目需求
  • 一、生成 exe
  • 二、通过 Dependencies 寻找所需dll
  • 三、将所需 dll 复制到 exe 同级目录下
    • 3.1 通过 python 脚本自动处理
    • 3.2 使用 Everthing 搜索特定dll
    • 3.3 验证 dll 是否完备
  • 四、使用 Enigma Virtual Box 对 dll 和 exe 进行封包
    • 4.1 下载安装 Enigma Virtual Box
    • 4.2 开始执行封包
  • 五、验证封包后的 exe

〇、项目需求

通过exe进行交付时,但通常会使用一些第三方库,如果对方没有相应环境或环境配置不同或版本不同,那就不能愉快地执行程序了。所以就需要把用到的dll和exe一起打包,但这样稍显臃肿和不便。因为用到的dll基本上是第三库的,几乎不会自己去更新,所以不如将dll和exe封包到一起。

一、生成 exe

Release 下生成原始exe,注意在这一步要把接API暴露出来。

二、通过 Dependencies 寻找所需dll

Dependencies 提供GUI和程序调用接口。
其GUI打开是这个样子,使用也很简单,把exe拖进去就行了。
在这里插入图片描述

但是其GUI分析结果没有输出选项,所以这里我选择使用其调用接口,通过通过命令行找到exe所依赖的dll,并将输出另存为txt。

如:

 .\Dependencies.exe -imports "D:\Project\CPP_Project\PCL_align\x64\Release\PCL_align.exe" -modules >>"D:\Project\CPP_Project\PCL_align\x64\dll.txt"

Dependencies下载安装后,安装目录下就有 Dependencies.exe 和 DependenciesGUI.exe。

输出的txt大概长这样子

[ROOT] PCL_align.exe : D:\Project\CPP_Project\PCL_align\x64\Release\PCL_align.exe 
[ApiSetSchema] api-ms-win-crt-heap-l1-1-0.dll : C:\Windows\system32\ucrtbase.dll 
......
[ApiSetSchema] api-ms-win-devices-query-l1-1-1.dll : C:\Windows\system32\cfgmgr32.dll 
[ApiSetSchema] ext-ms-win-winrt-storage-l1-2-1.dll : C:\Windows\system32\windows.storage.dll 
[WellKnownDlls] KERNEL32.dll : C:\Windows\system32\kernel32.dll 
......
[WellKnownDlls] COMDLG32.dll : C:\Windows\system32\COMDLG32.dll 
[WellKnownDlls] setupapi.dll : C:\Windows\system32\Setupapi.dll 
[WellKnownDlls] PSAPI.DLL : C:\Windows\system32\PSAPI.DLL 
[WindowsFolder] MSVCP140.dll : C:\Windows\system32\MSVCP140.dll 
[WindowsFolder] VCRUNTIME140_1.dll : C:\Windows\system32\VCRUNTIME140_1.dll 
[WindowsFolder] VCRUNTIME140.dll : C:\Windows\system32\VCRUNTIME140.dll 
......
[WindowsFolder] OPENGL32.dll : C:\Windows\system32\OPENGL32.dll 
[WindowsFolder] GLU32.dll : C:\Windows\system32\GLU32.dll 
[Environment] pcl_common.dll : D:\Program Files (x86)\PCL 1.13.0\bin\pcl_common.dll 
[Environment] pcl_filters.dll : D:\Program Files (x86)\PCL 1.13.0\bin\pcl_filters.dll 
......
[Environment] vtkFiltersHyperTree-9.2.dll : D:\Program Files (x86)\PCL 1.13.0\3rdParty\VTK\bin\vtkFiltersHyperTree-9.2.dll 
[Environment] vtkloguru-9.2.dll : D:\Program Files (x86)\PCL 1.13.0\3rdParty\VTK\bin\vtkloguru-9.2.dll 
[Environment] vtkkissfft-9.2.dll : D:\Program Files (x86)\PCL 1.13.0\3rdParty\VTK\bin\vtkkissfft-9.2.dll 
[NOT_FOUND] ext-ms-win-shell32-shellcom-l1-1-0.dll :  
[NOT_FOUND] ext-ms-win32-subsystem-query-l1-1-0.dll :  
[NOT_FOUND] ext-ms-win-security-chambers-l1-1-0.dll :  
......
[NOT_FOUND] ext-ms-win-dx-ddraw-l1-1-0.dll :  
[NOT_FOUND] api-ms-win-core-psapi-obsolete-l1-1-0.dll :  

三、将所需 dll 复制到 exe 同级目录下

3.1 通过 python 脚本自动处理

主要关注 [Environment] 项目中的dll。

# File      :Extract_dll_to_floder.py
# Auther    :WooChi
# Time      :2023/10/11
# Version   :1.0
# Function  :

import os
import shutil

def Move_File_to_Folder(txtPath,tgtPath):
    with open(txtPath, 'r') as file:
        count=0
        for line in file:
            if(line[:13]=="[Environment]"):
                count+=1
                # 使用":"将字符串分割成两部分
                parts = line.split(" : ")
                dllpath = parts[1][:-2]
                shutil.move(dllpath , os.path.join(tgtPath, os.path.basename(dllpath)))

if __name__ == '__main__':
    txtPath=r"D:\Project\CPP_Project\PCL_align\x64\dll.txt"
    tgtPath=r"D:\Project\CPP_Project\PCL_align\x64\Release"

    Move_File_to_Folder(txtPath,tgtPath)

3.2 使用 Everthing 搜索特定dll

少数情况下,[NOT_FOUND] 中也会出现所需dll,这时候可以用 Everthing 搜索相应 dll 再复制到exe同级目录下就ok了。

Everthing 除了GUI外,还有可供调用的接口,但是需要完整安装 Evething,而我使用的是单文件版,这里就不展开了,具体可参考这里。

3.3 验证 dll 是否完备

在exe所在目录下双击exe或通过cmd执行exe,若一闪而过、正常运行,则dll已完备,若弹出找不到***.dll,说明还缺相应的dll。

四、使用 Enigma Virtual Box 对 dll 和 exe 进行封包

4.1 下载安装 Enigma Virtual Box

去官网下载然后安装,不多说了。

4.2 开始执行封包

  1. 打开 Enigma Virtual Box

  2. 选择待封包程序和新程序名字(默认_boxed.exe)
    在这里插入图片描述

  3. 左下角增加递归文件夹,选择 dll 所在目录,也就是之前提到的 exe 同级目录,在对话框中确定。
    在这里插入图片描述

  4. 在树形结构里,把不需要的文件移除(除了dll外的其他文件对移除)。
    在这里插入图片描述

  5. 点击右下角文件选择,勾选压缩文件选项。
    在这里插入图片描述

  6. 右下角,点击执行封包,很快就大功告成。
    在这里插入图片描述

五、验证封包后的 exe

  1. 将封包的exe文件移动到其他目录下通过cmd执行相应命令进行验证。
  2. 到其他设备进行验证。

打完收工!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1139857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ch3_6多线程举例

作者丨billom 来源丨投稿 编辑丨GiantPandaCV 云端深度学习的服务的性能加速通常需要算法和工程的协同加速,需要模型推理和计算节点的融合,并保证整个“木桶”没有太明显的短板。 如何在满足时延前提下让算法工程师的服务的吞吐尽可能高,尽…

Photoshop2024磨皮滤镜插件Portraiture

想要快速提升人像修图效果,让皮肤看起来更加光滑细腻吗?那么你可以尝试使用Photoshop磨皮滤镜插件。这些插件能够让你在短时间内快速有效地进行人像处理,无论是对于专业的设计师还是初学者来说都是非常实用的工具。 接下来,让我为…

AI时代中小企业算力需求爆发,惠普发布新品战99 Monster满血高算工作站

第17届DEMO CHINA创新中国峰会10月25日至26日在北京举行,吸引了国内众多优秀创新创业项目的积极参与。作为本届DEMO CHINA独家战略合作伙伴,惠普在大会上正式发布战家族新品战99 Monster满血高算工作站,满足AI时代中小企业对于算力的爆发式需…

Live800:客服中心质检管理的五大方法

客服中心质检管理是企业提供优质服务和客户满意度的关键。因此,企业必须采用适当的方法来管理客服质检以确保服务质量。本文将介绍客服中心质检管理的五大方法。 1、建立清晰的服务标准 建立清晰的服务标准是提高客服质量的关键因素。服务标准可以包括快速响应时间…

TypeScript详解

一、是什么 TypeScript 是 JavaScript 的类型的超集,支持ES6语法,支持面向对象编程的概念,如类、接口、继承、泛型等 超集,不得不说另外一个概念,子集,怎么理解这两个呢,举个例子,如…

广受欢迎的 VLC Media Player 开源媒体播放器软件已更新到 3.0.19 版

导读广受欢迎的 VLC Media Player 开源媒体播放器软件已更新到 3.0.19 版,这是继 VLC 3.0.18 发布近一年后的又一版本,其中包含大量改进和错误修复。 VLC 3.0.19 版本的亮点包括改进了软件解码对 AV1 HDR 的支持,支持 WAV 音频文件的 RIFF IN…

基于SSM的罪犯信息管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

数字化工厂:连接、集成与数据融合

随着科技的不断发展,数字化工厂管理系统逐渐成为制造业的重要趋势。数字化工厂的核心在于连接、集成与数据融合,通过这些技术手段,实现对设备、生产线、工厂、供应商、产品、客户等各个环节的全面优化,提升企业的生产效率和产品质…

字符串中的assert和strcat

assert:函数原型是:void assert( int expression );其作用是现计算表达式 expression ,如果其值为假(即为0),那么它先 stderr 打印一条出信息,然后通过调用 abort 来终止程序运行。使用assert 的缺点是,频繁的调用会影…

GoLong的学习之路(十二)语法之标准库 flag的使用

上回书说到,fmt的标准库的一些常用的使用函数。这次说flag的使用,以下这些库要去做了解。不然GG,Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。 文章目录 os.Argsflag包flag.Type()flag.TypeVar(…

AI口语APP的实现

AI口语应用程序是一种借助人工智能技术,旨在帮助用户提高口语能力、练习语言技能以及进行交流和学习语言的应用程序。这类应用通常提供以下主要功能,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交…

Ansys Speos | SPEOS 在HUD杂光分析中的应用

概述 随着汽车智能座舱的普及,HUD的装车率也随之增加,未来也可能会成为车内座舱的标配。而HUD是一个由光学,机械,电子,软件组成的复杂的高科技产品,其所在的汽车座舱是很复杂的环境。我们需要对HUD进行诸如…

2023年05月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 可以对Python代码进行多行注释的是?( ) A: # B: " " C: ‘’’ ‘’’…

Java关于实例对象调用静态变量和静态方法问题

直接去看原文 原文链接:Java关于实例对象调用静态变量和静态方法问题_java对象可以调用static方法吗_骑个小蜗牛的博客-CSDN博客 --------------------------------------------------------------------------------------------------------------------------------- 实例…

2.13每日一题(根号下的定积分及去绝对值的定积分)

1、用三角函数的公式化1及二倍角公式将sinx化掉,构成完全平方公式 2、去根号,注意去根号要加绝对值, 3、通过区间比较sinx、cosx的大小去绝对值

vscode 保存 “index.tsx“失败: 权限不足。选择 “以超级用户身份重试“ 以超级用户身份重试。

vscode 保存 "index.tsx"失败: 权限不足。选择 “以超级用户身份重试” 以超级用户身份重试。 操作:mac在文件夹中创建文件,sudo 创建umiJs项目 解决:修改文件夹权限 右键文件夹

浮点数的表示与运算

一、浮点数的表示 1、规格化浮点数的特点 2、浮点数表示

C#上位机序列10: 批量读写+点对点更新+数据类型处理

一、源码结构 二、运行效果 三、源码解析 PLC批量读写点对点更新数据类型处理 优点:根据数据类型,判定监听的地址范围(40120_int 监听两个word:40120 40121;40130_long 监听四个word:40130 40131 40132 4…

运营商光纤资源管理:管理工具的力量

随着通信信息化水平发展,光纤资源已成为现代通信网络的核心要素之一。然而,管理却面临诸多挑战,尤其对于电信运营商而言,面对庞大而复杂的光纤网络资源,怎样做到既不浪费现有资源,又能满足未来业务需求&…

18亿欧元大动作,法国瞄准实现量子飞跃

Quobly 正在开发一种容错量子处理器(图片来源:网络) 2021年1月,马克龙总统宣布了法国国家量子计算计划,并将为该技术投入高达18亿欧元。 “量子战略至关重要,”马克龙在量子研究中心巴黎萨克雷大学宣布该…