# APPLoader **Repository Path**: miuser00/apploader ## Basic Information - **Project Name**: APPLoader - **Description**: APP Loader开源项目是一款集成文件打包、动态在线升级的应用程序包裹工具。使用APP Loader 开源项目,您可以轻松的将您的程序文件夹打包到单一可执行文件里并可支持在线软件升级。 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 11 - **Forks**: 1 - **Created**: 2022-12-09 - **Last Updated**: 2024-11-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # APP Loader 产品介绍 ## 功能简介 APP Loader开源项目是一款集成文件打包、动态在线升级的应用程序包裹工具。使用APP Loader 开源项目,您可以轻松的将您的程序文件夹打包到单一可执行文件里并可支持在线软件升级。 #### APP Loader支持以下功能 1. 将您编写好的程序文件以业界压缩率最高的7z压缩形式进行打包,并附着在单一的可执行文件中。 2. 当服务器有软件包更新时,以无感方式自动从Web服务端下载更新文件。 3. 更新文件下载完成后,实时更新您的软件到最新版本。 4. 提供可视化的更新包生成工具,支持菜单化配置,说明文档编辑,版本控制等功能。 5. 支持如自升级、安装包完整性校验、以及文件粒度的选择性更新等定制升级功能。 6. 作为APP Loader的应用案例,内置全功能开源免费的MD文件编辑器MD Loader ^_^ #### APP Loader完整项目由两个软件构成 1. OTAPG 包生成工具(OTA Package Generator) 负责生成安装程序包,也提供FTP上传等Web包自动化功能。 2. Loader 加载器,负责您的应用程序的解包及版本升级管理,也负责安装包的自动下载。 #### 版权声明 APP Loader 采用mit协议进行发布,源码完全公开,欢迎您使用或基于本项目进行二次开发。 ## 使用方法 APP Loader有两种工作方式供您选择:离线完整安装程序和最小化在线安装程序。升级配置方式也提供了两种方式:内置打包配置,外置xml配置文件。 这两种方式可以任意组合,难易度略有差别。 最基本方式的是傻瓜化的,免编译的,根据提示点几个按钮就能完成。更高级的打包方式步骤稍繁琐一点,并需要您的电脑安装了 Visual Studio 软件包,并要求您按使用说明花费一两分钟时间进行编译打包操作。 使用方法见[《APP Loader 简易使用说明书》](./UserManual.md "《APP Loader 简易使用说明书》") ## 代码设计 #### APP Loader 由两部分构成 ### 1 升级包生成器 #### 功能: 1. 负责生成7z格式的压缩包,可以供用户选择包含新版本APP的全部,或部分安装文件。 2. 负责生成xml格式的升级配置文件,配置文件包括了软件的版本号,压缩包下载url,说明文档url,以及压缩包的MD5 128bit签名。 还包括了某些文件及文件夹的列表,这些文件将在引导程序升级时被选择性跳过。 3. 提供升级说明文件的编辑功能,用来描述升级内容。 ### 2 程序引导及升级程序 1. 负责打包发布您的程序到单一可执行文件 2. 支持在线安装方式生成可执行文件,文件体积低至1M以下 2. 负责在线的版本控制,自动下载更新最新版的程序 ### 更新包内容 - 用户需要提供一个http文件服务器,并上传升级包。升级包由三个文件构成" - upgrade.xml(xml格式的文件,包含安装版本号,压缩包哈希值,不需要更新的文件名单等基本信息) - upgrade.md (md格式的更新说明文件) - 升级包 (程序安装目录的7z压缩包,文件名在update.xml中指定) ### 程序包安装流程 - 程序首先查看自身是否已经包含了离线下载软件包,如果存在则进行自解压,并设置好标志文件"ready.flag",然后启动程序更新流程。 - 如果未发现自身包含离线下载软件包,则弹出升级窗口,提示用户需要下载程序包,当程序包下载完成后,启动程序更新流程。(这个过程与静默下载流程不同,静默下载后程序自动退出,等待用户下次主动执行,这里是弹窗下载,下载后程序自动重启) ### 程序更新流程 - 当程序执行时,首先查找当前目录是否存在config.xml文件,如果存在则按照文件配置执行本程序,如果不存在则按照程序包内的默认配置执行本程序。 - 当升级准备好标志文件"ready.flag"不存在时表示缓冲区内没有待更新的版本,客户主程序启动运行,升级程序检查服务器的是否有更新的软件包供下载,如果没有则退出程序。 - 如果检查发现有更新的软件包,下载程序开始在后台启动更新包到下载更新区,下载完成后,并生成文件"ready.flag",然后退出升级程序。 - 当软件再次启动时,程序检测到升级准备好标志文件"ready.flag"文件,表示缓冲区有待更新的版本,升级程序完成应用升级。 - 升级流程首先计算md5签名是否OK,如果检测不通过,丢弃本次升级文件 - 如果签名与接收到的文件匹配,则完成升级流程,并重新启动主程序 - 升级流程开始前,先保存需要跳过的文件,然后解压缩覆盖所有文件,再把预先保存的文件复制回来 - 升级最后阶段,启动self_updater,并退出自身进程,由self_updater完成Apploader自身的升级工作 - 升级完成后继续启动主程序 ### 项目目录结构 Loader.sln --VS2019项目文件 readme.md --本说明文档 UserManual.md --使用说明书 App --应用程序目录(用来存放AppLoader主程序与您的程序) Bin32 --应用的程序文件夹 7za.exe --压缩解压缩程序 MDLoader.exe --Loader的主程序 uppack --升级用文件夹 downlaod --下载的升级文件包 zipped --解压缩待升级的程序目录 ready.flag --待升级的标志文件 upgrade.xml --服务器的最新的升级配置文件,包含MD5签名 config --用户配置文件 document --文档 license --版权信息 AppLoader.exe --主程序 App_PackageGenerator --OTAPG包生成工具的目录,用来存放包生成程序 OTAPackageGenerate.exe --包生成工具的主程序 MDloader --包生成工具的MD文件编辑器插件 bin32 --包生成工具的依赖程序 APPLoader --源代码 APP_Loader --APPLoader程序源码 MDLoader --MD文件编辑器(源码地址 https://gitee.com/miuser00/md-fileloader ) OTAPackageGenerate --OTAPackageGenerate程序源码 resource --参考开源项目 self_updater --自更新程序源码,APPLoader的依赖组件 packages --项目依赖的包 RelApp --非压缩的应用程序文件包 APP --未压缩的程序目录 upgrade.md --升级说明文档 upgrade.xml --升级配置文档 RelPack --打包后的程序文件 xxx.mpack --7z格式的程序包 upgrade.md --升级说明文档 upgrade.xml --升级配置文档 license --版权声明 ### OTA升级包目录结构(需要放置在您的Web文件服务器上,并修改update.xml相应的字段) upgrade.xml (生成的升级配置文件,包含MD5签名) upgrade.md (升级说明文件) mdloader.pak (打包的程序文件包,文件名在upgrade.xml中配置) ### 程序打包示例(打包对象为MD开源文件编辑器) MDLoaderFull.exe ### 项目特点 越来越多的软件开发者都在努力的开发自己的应用程序并积极发布到网络。由于软件更新周期越来越短,希望通过少量的独立发布使软件功能达到用户满意变的非常困难,所以先开发一个可用版本的软件推向市场,并根据用户反馈实时发布更新成为了一个相对经济的选择。 在开发本项目前,本农就遇到了这样的问题:如何能以用户满意的方式发布自己的应用程序? 我积极在网上寻找符合要求的开源项目,发现没有这样的项目可以同时满足我的三项基本需求:1)静默升级,2)免下载等待,3)支持选择性更新项目文件,所以就顺手自己开发了一个并开源了出来,希望同样喜欢软件开发的您能有所利用。 ## 致谢 感谢我认识及被我剽窃了代码的每一个大佬与同行朋友们。如果您发现了本程序的bug,请与作者取得联系QQ:64034373@qq.com