前言
应用内更新的逻辑是,应用内检测受否需要更新,如果需要更新,安装包下载到本地后,进行打开安装,同时关闭当前应用。
旧版本的API为
1 | const {shell} = window.require("electron"); |
旧版本是没有问题的。
新版本变更为
1 | const {shell} = window.require("electron"); |
但是这样就出现问题了,新版本打开是在子进程中,安装应用安装包时,应用进程是必须要关闭,如果应用进程关闭,安装包对应的子进程也会关闭,导致安装终止。
node-cmd
所以只能更换一种方式
1 | npm install node-cmd -s |
在Electron中
1 | const cmd = window.require('node-cmd'); |
注意启动应用应该这样
1 | start "" "D:\Project\myapp.exe" |
注意
- 路径要添加双引号,否则路径中有空格就无法打开应用。
- start命令后要添加
""
,否则打不开应用,第一个参数会被当做标题,第二个才是文件路径。
node-cmd简介
node-cmd模块中主要有run和get两类命令,其中run是执行cmd命令,get命令除了异步执行cmd命令外,在执行完毕后还会执行回调函数,返回命令行窗口的输出。
1 | var cmd = require('node-cmd'); |
完整示例
完整的下载应用代码示例:
渲染进程中
1 | const path = window.require("path"); |
Electron路径最佳实践
如果渲染进程太多,不建议在渲染进程中获取路径,建议在主进程中设置。
主进程
1 | const {app} = require("electron"); |
注意
在有些电脑上竟然无法使用
app.getPath("downloads")
获取路径,所以这里进行异常捕获。有些电脑用户名是中文,而某些SDK不支持路径中包含中文和空格,这里也做了判断。
渲染进程
1 | const remote = window.require("electron").remote; |