Electron(Node.js)下载文件并执行.exe文件

el/2023/9/24 22:02:17

描述一下遇到的问题!

1.因为Electron软件需要使用特殊的文件层级包裹,里面携带一些驱动 固件等等,所以不能直接使用electron-update升级的方式去升级应用程序,所以另辟蹊径。

2.目前使用了VNISEdit 编译环境来编译安装包(NSIS脚本编译),下载时直接安装覆盖。

const http = require('http')
const path = require('path')
const fs = require('fs')http.get("http://serverIp:8088/AppInstall.exe", (res) => {if (res.statusCode !== "200") {const file = fs.createWriteStream(path.join(__dirname) + `${res.req.path.split('/')[res.req.path.split('/').length-1]}`)// 进度const len = parseInt(res.headers['content-length']) // 文件总长度console.log(len);let cur = 0res.on('data', function (chunk) {cur += chunk.lengthconst progress = (100.0 * cur / len).toFixed(2) // 当前进度const currProgress = (cur / 1048576).toFixed(2) // 当前了多少//这里开启新的线程启动子窗子 将进度条数据传送至子窗口 显示下载进度。// console.log(progress);// console.log(currProgress + "M");})res.on('end', () => {console.log('下载结束')//下载完成执行exe文件ToolsUpgrade(path.join(__dirname) + `${res.req.path.split('/')[res.req.path.split('/').length-1]}`);})file.on('finish', () => {// console.log('文件写入结束')file.close()}).on('error', (err) => {fs.unlink(path.join(__dirname) + `${res.req.path.split('/')[res.req.path.split('/').length-1]}`)if (err) {console.log(err)}})res.pipe(file)} else {console.log("网络错误!")}
})//调用.exe文件
function ToolsUpgrade(url) {var cluster = require('child_process');cluster.exec('"' + url + '"', (err, res) => {console.log(err)console.log(res)})
}


http://www.ngui.cc/el/3577143.html

相关文章

微信小程序:登陆获取用户信息,包括维护3rdSession。(Node.js-Koa)

前两三个月最常见的问题就是登陆模块的问题了。自己也改了好几次登陆的问题,从普通登陆,一直改到维护3rdSession。(token) 普通登陆:用户数据包括appid,secret全部暴露在外,相对来说不安全。 …

微信小程序:高德API之定位。

在开始开发前有几步必要步骤: 1.进入高德地图API官网,登陆,开发支持-微信小程序SDK,控制台,应用管理,创建开发需要的key。注意:服务平台,必须是微信小程序。key用于什么开发就创建什…

微信小程序:高德API-PoI地址搜索

在开始开发前有几步必要步骤: 1.进入高德地图API官网,登陆,开发支持-微信小程序SDK,控制台,应用管理,创建开发需要的key。注意:服务平台,必须是微信小程序。key用于什么开发就创建什…

WebSocket消息推送接收-(微仿滴滴打车业务场景)-(node.js-Vue.js)

年终结尾最后一次更新,在不写一次估计年前就没机会再写了(保证一月一次)。突然想起之前一个朋友问起实时订单推送如何实现。在年尾没啥事自己也比较感兴趣,简单实现了一下。 1.开始 直接梭。安装websocket依赖库。 //安装 webs…

Node.js 搭建邮件发送服务

在日常的登录,注册中经常会使用到邮件服务,这里记录一个邮件发送服务。以163为例 第一步:下载依赖 npm install nodemailer --save第二步:去163网站获取邮件授权码。 第三步:配置configuration文件。 module.export…

PM2 ecosystem 服务器自动化部署

一:准备工作 1.1 :将项目上传至代码管理库(github,gitlab,bitbucket,等) 1.2 :Windows 和 服务器 都安装SSH,Git 工具。 二:开始 2.1 本地生成ssh key连接服务器 //根据邮箱生成ssh key ss…

Socket.io 聊天室(代码已开源)

1.启发 1.1 最近得闲有空玩一下Socket.io跟RabbitMQ所以造个小项目自己玩玩。 1.2 当然不是正式项目,个人复习 测试所用。设计部分有的地方也不太合理,UI也是随便弄的。 1.3 有个BUG,这个问题我只在Web端遇到过。描述:Web连…

http预请求,请求两次

在有很多情况下,当我们在js里面调用一次ajax请求时,在浏览器那边却会查询到两次请求,第一次的Request Method参数是OPTIONS,还有一次就是我们真正的请求,比如get或是post请求方式 查阅相关的资料之后发现,这是浏览器对复杂跨域请求的一种处理方式,在真正发送请求之前,会先进行…

三元表达式三个条件校验

表达式1 ? 表达式1为true时的结果 : ( 表达式2 ? 表达式2为true时的结果 : 全都是false的结果 ) 例如:

关于VUE中弹窗鼠标误点关闭的问题

关于VUE中弹窗点击空白处自动关闭问题 只需要在 增加这句话即可 :close-on-click-modal“false” 这样就限定了 弹窗只可以点击小叉叉或者取消来关闭 误点其他地方不会自动关闭 具体使用如图: