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

描述一下遇到的问题!

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 = 0
        res.on('data', function (chunk) {
            cur += chunk.length
            const 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)
    })
}

你可能感兴趣的:(Node.js,Electron,electron,node.js,javascript)