UE中记:静默自更新插件(多路径部署

自动更新系统原理说明文档

概述

本自动更新系统是一个基于Node.js的应用程序,用于自动检查、下载、解压并安装软件更新。它由多个脚本和一个更新服务器组成,能够在后台自动执行更新流程,确保软件保持最新状态。

组件说明
  • SetUp.bat: 主批处理脚本,用于检查管理员权限,若无权限则请求提升,然后调用.\UpdateClient\SetUp.bat
  • .\UpdateClient\SetUp.bat: 更新客户端的批处理脚本,用于安装必要的Node.js模块并执行installService.js
  • installService.js: Node.js脚本,创建服务来监控和执行更新操作,复制必要的脚本到临时目录,并将当前路径添加到_paths_.ini文件。
  • checkAndUpdate.js: Node.js脚本,检查更新信息,下载并解压更新包,执行更新安装脚本或重启软件。
  • SetUpTemp.bat: 临时批处理脚本,用于在临时目录中安装必要的Node.js模块。
  • update-server.js: 更新服务器的Node.js脚本,提供更新信息和更新文件的下载。
工作流程
  1. 权限检查与提升: SetUp.bat 检查是否以管理员权限运行,若不是,则创建VBS脚本提升权限。
  2. 初始化更新客户端: SetUp.bat 调用 .\UpdateClient\SetUp.bat,该脚本安装必要的Node.js模块并执行 installService.js
  3. 服务安装与启动: installService.js 创建一个Windows服务,用于执行更新检查和安装。同时,将当前软件路径添加到 paths.ini 文件以供后续使用。
  4. 更新检查: checkAndUpdate.js 从更新服务器获取最新的更新信息,如果发现新版本,则继续下载更新。
  5. 下载更新: 更新文件通过HTTP请求从服务器下载到本地。
  6. 解压更新: 下载的ZIP文件被解压到指定的目录。
  7. 安装更新: 解压后的文件通过执行 SetUp.bat 脚本安装或通过重启软件应用更新。
  8. 更新服务器: update-server.js 运行一个简单的HTTP服务器,提供更新信息和更新文件的下载。
调用关系图
+----------------+      +----------------------+
| SetUp.bat      |      | .\UpdateClient       |
| (主批处理)      +----->+ SetUp.bat            |
+----------------+      | (更新客户端批处理)    |+----------+-----------+|v+----------+-----------+| installService.js    || (安装服务Node脚本)    |+----------+-----------+|v+----------+-----------+| checkAndUpdate.js    ||(检查和应用更新Node脚本)|+----------+-----------+|v+----------+-----------+| SetUpTemp.bat        || (临时目录Node模块安装) |+----------------------+
在这个流程图中,update-server.js不直接参与自动更新的客户端流程。它独立运行,提供必要的更新文件和元数据。以下是update-server.js的位置和作用:+-----------------------+
| update-server.js      |
| (更新服务器Node脚本)   |
| 托管更新文件和元数据    |
+-----------------------+
update-server.js运行在服务器端,客户端通过checkAndUpdate.js与之通信,获取更新信息并下载更新包。

注意事项

  • 在执行更新流程之前,确保所有脚本和服务都已经正确配置。
  • 更新服务器应始终可用,以便客户端可以检查和下载更新。
  • 确保更新过程不会干扰到正在运行的应用程序的正常使用。
  • 更新脚本应具有错误处理机制,以应对下载失败、文件解压错误等异常情况。

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

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

相关文章

马蹄集第34周

1.战神的对称谜题 不知道为什么超时&#xff01; def main():s input()result 0for i in range(len(s)):l i - 1r i 1while l > 0 and r < len(s) and s[l] s[r]:result max(result, r - l 1)l - 1r 1l ir i 1while l > 0 and r < len(s) and s[l] s…

Halcon 螺丝孔位定位

标定坐标&#xff1a;对整个9点标定版进行拍摄时的世界坐标HomMat2D1&#xff1a;标定后得到的换算关系孔位世界坐标&#xff1a;相机移动到孔位上的世界坐标圆心世界坐标&#xff1a;模版匹配后得到的螺丝孔位中心 相对偏移: 孔位世界坐标 - 标定坐标 目标坐标&#xff1a;圆…

【LeetCode】 160. 相交链表

相交链表 题目题解 题目 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&am…

FileInputStream 与 FileOutputStream

IO流&#xff1a;存贮和解决数据的存储方案 以上都是抽象类&#xff0c;不能创建实例 FileOutputStream 操作本地的文件&#xff0c;把文件写入本地磁盘 步骤&#xff1a; 1.创建字节输出流对象 参数是字符串表示的路径或者是File对象都是可以的如果文件不存在会创建一个新的…

redis笔记 -- 基础数据结构

redis笔记 基础的数据结构&#xff1a;string、list、hash、set、zset 容器型数据结构&#xff08;list、hash、set、zset&#xff09;通用规则 如果容器不存在&#xff0c;就创建一个&#xff0c;再进行操作如果容器里没有数据了&#xff0c;就立即删除&#xff0c;回收内存…

持续集成交付CICD:GitLabCI 运行前后端项目

目录 一、理论 1.spring项目自动构建 2.阿里云云效 Maven 3.Maven安装 4.Go安装 5.NPM安装 二、实验 1.GitLabCI 运行Maven项目 2.GitLabCI 运行Go项目 3.GitLabCI 运行NPM项目 三、问题 1.前端脚手架如何初始化项目 2.NPM下载如何指定 3.Go项目下载源如何指定 …

c++面试题

1.static的使用 1&#xff09;修饰局部变量&#xff1a;在函数内部使用static修饰局部变量&#xff0c;会使它成为静态局部变量。静态局部变量只会被初始化一次&#xff0c;且只有在第一次调用该函数时才会被初始化&#xff0c;之后每次调用该函数时都会保留上一次的值.从原来…

大数据-之LibrA数据库系统告警处理(ALM-37017 数据库连接数超限)

告警解释 当集群中单个CN实例上某个数据库的连接数超过限制时&#xff0c;产生该告警。 告警属性 告警ID 告警级别 可自动清除 37017 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称 RoleName 产生告警的角色名称 HostName 产生告警的主机…

Vue生命周期:组件的生命之旅

&#x1f343;引言 在Vue.js中&#xff0c;每个组件都有其独特的生命周期。这个生命周期指的是组件从创建到销毁的一系列过程。了解并正确使用Vue的生命周期钩子&#xff0c;对于优化组件性能、管理组件状态以及实现特定功能至关重要。本文将详细介绍Vue的生命周期及其各个阶段…

面试官:请说说JS中的防抖和节流

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 前言 为什么要做性能优化&#xff1f;性能优化到底有多重要&#xff1f; 性能优化是为了提供更好的用户体验、加…

数据库时间类型之间的转换魔法

解锁时间数据的魔法 时间&#xff0c;是数据库中一个充满魔法的复杂表现形式。在这篇博客中&#xff0c;我们将探讨在数据库中时间戳&#xff08;timestamp&#xff09;、日期&#xff08;date&#xff09;、日期时间&#xff08;datetime&#xff09;和字符串之间的转换技巧&…

Java面向对象第十天

精华笔记&#xff1a; 内存管理&#xff1a;由JVM来管理的----------我笔记里面有哪些就先记哪些 堆&#xff1a; 存储的是new出来的对象(包括实例变量、数组的元素) 垃圾&#xff1a;没有任何引用所指向的对象 垃圾回收器(GC)不定时到堆中清扫垃圾&#xff0c;回收过程是透明…

11.14 校招 实习 内推 面经

绿*泡*泡&#xff1a; neituijunsir 交流裙 &#xff0c;内推/实习/校招汇总表格 1、校招丨寒武纪24届校招重点岗位推介-软件类&#xff08;内推&#xff09; 校招丨寒武纪24届校招重点岗位推介-软件类&#xff08;内推&#xff09; 2、校招丨传音控股2024届秋招这些岗位还…

SpringBoot+Redis编写一个抢红包雨的案例。附源码。

案例演示 SpringBootRedis编写一个抢红包雨的案例。附源码 1、案例分析&#xff0c;整体方案介绍 预备上线一个红包雨活动。这个红包雨的思路是活动开始前25分钟&#xff0c;在后台创建活动。然后前端用户进入&#xff0c;到点后将设置的金额拆分成多个小红包&#xff0c;开启倒…

如何打造稳健高效的数据库基础设施?数据库云提出创新方案

引言 数据库的云化、丰富业务场景下多元的数据库类型、公有云与私有云交织的IT架构&#xff0c;叠加信创影响使得企业内部的基础设施日益复杂&#xff0c;如何高效管理多元的数据库和多云异构基础设施正成为企业面临的严峻挑战。在此背景下&#xff0c;数据库云应运而生。数据…

netty websocket学习

【硬核】肝了一月的Netty知识点 超详细Netty入门&#xff0c;看这篇就够了&#xff01; vuewebsokect实现实时聊天&#xff0c;可单聊、可群聊&#xff08;一&#xff09; vue实现聊天栏定位到最底部&#xff08;超简单、可直接复制使用&#xff09; vue实现指定div右键显示菜…

转向更卷的奶茶 库迪这是要在咖啡上认怂?

卖咖啡刚满一年&#xff0c;陆正耀就带着名为“茶猫”的奶茶项目再度登场。 根据多位网友的爆料&#xff0c;茶猫采取和库迪咖啡一样的联营商模式&#xff0c;且有低价补贴策略&#xff0c;主打低价茶饮市场&#xff0c;全场统一定价6.9元。 熟悉的加盟模式&#xff0c;熟悉的…

使用type实现接口继承效果

如何使用type实现接口继承的效果 接口继承的写法 // 接口继承 interface Person {name: stringage: numberhobby?: string say: (content: string) > void } interface Student extends Person {score: number }使用 type 模拟 interface的继承效果 // 使用type实现类似…

参考文献格式的引用

一、文献格式的快速引用 &#xff08;一&#xff09;参考文献的类型 参考文献的类型&#xff08;即引文出处&#xff09;以单字母方式标识在文献名后并以方括号括起&#xff0c;具体类型标识如下&#xff1a; M ——专著、普通图书 C ——论文集 N ——报纸文章 J ——期刊文章…

opencv-python中常用的函数及使用方法

OpenCV是一个开源计算机视觉库&#xff0c;提供了许多函数和工具&#xff0c;可以用于图像和视频处理、物体识别和跟踪、摄像机标定等任务。以下是一些常用的OpenCV函数及其使用方法的介绍&#xff1a; 1.图像读取和显示&#xff1a; cv2.imread()&#xff1a;用于读取图像文…