当前位置:首页 > node > 正文内容

node 打开本地安装包

自由小鸟5年前 (2020-10-28)node2120

在electron开发中,需要做到升级更新的功能
遇到下载安装包后,需要调起安装包,用到了node的模块,记录一下

//关闭进程
  ipcMain.on('appExit',()=>{
    app.exit()
  })
  ipcMain.on('startUp', () => {
    //创建exec方法byludan
    const { spawn } = require('child_process')
    let cp = ''
    if (platform.win32) {
      cp = spawn(dowloadfilePath,{
        detached: true  //这句很重要,关闭主进程时,保留子进程,弹出安装框不关闭
      })
    } else {
      cp = spawn('open', [dowloadfilePath])
    }

    cp.stdout.on('data', (data) => {
      let logs = data
        .toString()
        .split('\n')
        .filter((x) => x)
      logs.forEach((el) => {
        message = `${el}`
      })
    })
    cp.stderr.on('data', (data) => {
      let logs = data
        .toString()
        .split('\n')
        .filter((x) => x)
      logs.forEach((el) => {
        message = `${el}` //将返回值赋值给message
      })
    })
    cp.on('error', (err) => {
      console.log('Failed to start subprocess.')
    })
    setTimeout(() => {
      rceWindow.webContents.send('version_quit', {
        message: '启动完成',
      })

    }, 1500)
  })

渲染进程
import pcWin from '../browserWindow';

export default {
    props: ['versionStatus', 'versionData'],
    data() {
        return {
            dowloadCompuled: false,
            progresssum: 1,
            progress: false,
        };
    },
    methods: {
        // 立即启动
        startExE() {
            console.log('立即安装');
            RongDesktop.ipcRenderer.send('startUp');
            RongDesktop.ipcRenderer.on('version_quit', (evt, objs) => {
                console.log(objs);
                if (objs.message === '启动完成') {
                    pcWin.close();
                    RongDesktop.ipcRenderer.send('appExit');
                }
            });
        },
        // 自定义进度条文字
        setItemText(sum) {
            if (sum > 0 || sum <= 100) {
                return () => `下载中···${sum}%`;
            }
        },
        handleClose(done) {
            const context = this;
            if (done === 'confirm') {
                // 更新中
                this.progress = true;
                RongDesktop.ipcRenderer.on(
                    'version_file_progress',
                    (evt, args) => {
                        // console.log(Math.ceil((args.received / args.total) * 100));
                        // console.log(args);
                        if (
                            context.progresssum > 0
                            || context.progresssum <= 100
                        ) {
                            context.progresssum = Math.round(
                                (args.received / args.total) * 100,
                            );
                        }
                    },
                );
                RongDesktop.ipcRenderer.send(
                    'download_file',
                    `${context.versionData.src}`,
                    // 'http://download.ydstatic.com/notewebsite/downloads/YoudaoNote.dmg'
                );
                // 完成
                RongDesktop.ipcRenderer.on('downloadComplted', (evt, objs) => {
                    if (objs.message === '下载完成') {
                        context.dowloadCompuled = true;
                    }
                });
                // initDownload(attach, 'https://www.baidu.com', context);
                return false;
            }
            this.$emit('versionCallback', done);
        },
    },
};

版权声明:本文由Web学习之路发布,如需转载请注明出处。

本文链接:https://www.webge.net/?id=99

返回列表

没有更早的文章了...

下一篇:node exec 打开本地安装包

“node 打开本地安装包” 的相关文章

node 从0开始学习

1,新建一个文件夹,2, 进入文件夹内部,执行 npm init 一路回车3,创建index.js4,安装express及重要插件先来用express这个框架, 终端分别输入npm install express –save (注:–save是保存到项目中的意思)npm install body...

node.js学习记录

1,安装nodejs开发环境简单实现的石头剪刀布 console.log(process) //这个是node自带的 var playAction = process.argv[process.argv.length - 1] console.log(playAction) var ra...

vue3+nodejs项目记录

vue3+nodejs项目记录

新建文件目录app.vue代码 <template> <div class="demo"> <div class="text">Count: {{state.count}}</div>...

node中写接口常用到的sql语句

自己写接口不求人,node就很方便写接口,把自己写过的接口中用到的sql语句记录下来,方便日后查询 const sql = "insert into image set ?"; //一般没有传参数 const sql = "update image set...

nodejs 事件循环

nodejs 事件循环

经常面试喜欢问js的事件循环和node的区别node的比js的可要复杂一点先说一下js的,我只说10版本之后的,就不包括浏览器环境一些api了 个人理解的分类为js 整个脚本代码 全局代码js 异步事件: 各种的回调函数 异步事件分为宏任务-微任务宏任务:异步事件 (例如鼠标点击、键盘按键)...