想要制作一个一键打包并生成安装包(或安装程序)的小工具, 个人总结, 希望能帮到你.

本文用以下例子说明.

一个项目, 包含两个文件, app.yaml 和 app.exe.

  1. 什么是安装程序?

    1. 一个可执行文件
    2. 一个包含项目所有文件(本例为app.yaml和app.exe)的一个压缩包
    3. 在执行完之后会在安装目录添加项目文件(app.yaml 和 app.exe)的可执行程序
  2. 生成安装包的逻辑
    1. 打包项目文件, 即将项目文件压缩(加密), 如a.zip
    2. 生成安装包文件的可执行代码, 即在安装时所执行的程序, 此部分程序的重要功能:
      1. 解压(解密)在第1步生成的压缩(加密)文件
      2. 将解压(解密)出的文件移动到安装目录
    3. 将可执行代码编译成可执行文件, 如a.exe
    4. 将可执行文件与压缩文件以某种格式合并为一个文件, 即a.exe+a.zip
    5. 生成安装包完成
  3. 点击或执行安装包之后的逻辑
    1. 运行可执行代码部分, 即执行a.exe
    2. 可执行代码须解压(解密)出项目文件, 即a.zip
    3. 将解压(解密)出的项目文件(即将a.zip解压)移动到安装目录
    4. 安装完成

需要注意, 在生成安装包过程中, 将可执行文件与压缩文件以某种格式合并, 合并后的文件须仍可执行, 但仅执行文件中的a.exe部分.

安装包的原理与制作安装包的流程相关推荐

  1. 使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)

    原文:使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll) 前言:上篇使用Advanced Installer制作IIS安装包(一:配置IIS和Web.con ...

  2. vs2005制作安装包(自动安装.net framework 2.0)(小寿原创)

    vs2005制作安装包(自动安装.net framework 2.0)(小寿原创) 新建项目-> 其他项目类型->安装和部署->安装向导! 安装向导会提示你添加要安装的文件,这时你可 ...

  3. C#进阶系列——使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)...

    C#进阶系列--使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll) 原文:C#进阶系列--使用Advanced Installer制作IIS安装包(二:配置 ...

  4. VS2008制作安装包

    图文详细地址:http://www.itwis.com/html/net/kaifagongju/20090218/3387.html VS2008制作安装包 安装与部署 2010-03-13 14: ...

  5. Debian、Ubuntu源码编译制作安装包(二)

    在<Debian.Ubuntu源码编译制作安装包(一)>文章中描述了dpkg基本制作安装包过程,本篇文章描述如何增加patch及解决出错问题. 章节预览: 5. 增加patch 6. 修改 ...

  6. Debian、Ubuntu源码编译制作安装包(一)

    Debian.Ubuntu系列linux操作系统制作安装包相较于CentOS更简便一些,如"dpkg -b"指令即可重新打包.如果需要源码级制作安装包则更困难一些,接下来,我们逐步 ...

  7. 利用WIX制作安装包(2)

    利用WIX制作安装包(2) 原文 利用WIX制作安装包(2) 这一篇文章将为大家介绍如何使用WIX自定义UI.上一篇文章我们讲过WIX为我们提供了五种安装界面.每种安装界面都是由不同的Dialog组成 ...

  8. 为自己编写的windows应用程序制作安装包

    1 写好了一个windows程序之后如何制作安装包 这个在vs中就可以直接发布了,可以制作msi的安装包和exe的安装包. 2 window应用程序安装包做了哪些事情 rpm安装包的话,只是把相应的文 ...

  9. vs 2019使用Installer Project制作安装包的问题

    项目场景: vs 2019 C# 项目使用Installer Project制作安装包 问题描述: 1.vs 2019 中visual studio marketplace中无法下载Installer ...

最新文章

  1. 找啊找啊找木偶,图灵奖得主G. Hinton第一篇论文曝光!
  2. web开发中目录路径问题的解决
  3. 【Flutter】Flutter 手势交互 ( 点击事件处理 | 点击 onTap | 双击 | 长按 onLongPress | 点击取消 | 按下 onTapDown | 抬起 onTapUp )
  4. 网站的容错性设计原则
  5. QTextCodec中的setCodecForTr等终于消失了 (Qt5)
  6. UPS对发电机组的影响
  7. django批量form表单处理
  8. Java / Cloud:如何快速创建支持Kubernetes的REST微服务
  9. 如何用Java编写类似C的Sizeof函数
  10. globalmapper如何选取图像上的点_OpenCV 进阶应用,用编程手段搞定图像处理
  11. jqGrid细节备注—jqGrid中自定义格式,URL格式
  12. 数据结构之图的存储结构:邻接矩阵法
  13. iText简介(转)
  14. pygame显示图片的方法_使用Sprite实现移动动画(Pygame中的精灵类)
  15. 如何将日志配置文件放入到Apollo配置中心并支持热更新
  16. 支撑位和压力位怎么看是什么意思?
  17. 单生产者/单消费者 的 FIFO 无锁队列
  18. 2010年ImagineCup,我们共同走过
  19. httphandler java_java – 使用HTTPHandler上传文件
  20. 学习炒股必读的10本书

热门文章

  1. 如何升级MacOS自带的PHP到指定版本(5.3-7.3)
  2. 数字音视频知识点汇总(一)
  3. labelme标记数据后,批量处理json文件,生成标签
  4. 安装宝塔面板后原ssh连接失败问题及解决
  5. 冒志鸿:大公司不模仿你,说明你危险了
  6. 通过Docker 安装 cloudera manager 平台
  7. java模仿微博代码_杨老师课堂_Java核心技术下之控制台模拟微博用户注册案例
  8. 一个简单的学籍信息管理系统,基于PHP和Bootstrap的实现
  9. C++进阶笔记001:static 静态生存期 和 动态生存期
  10. 群发邮件软件怎么发,教你邮箱群发邮件小技巧