由于项目的更新服务很不稳定,所以想着换一个更新服务。百度一下,立马就看到了electron-updater。网上有很多关于如何使用的demo,我就跟着试了一下,发现了很多的问题,在这里做一个总结。
当然网上说过的我就不说了。。。。。。。。。。。。。。
1. 自动更新,参数名:autoDownload,文件名:AppUpdater.js
执行autoUpdate.checkForUpdate()方法后,electron-updater(以下简称eu)会开始检查版本号,然后下载服务器里面的lastest.yml
文件,这个文件包含version
,path
,sha512/sha256
三个参数。接着比较自己的版本号和version,如果相同则表示已经是最新版本,不同则会产生结果:第一种就是字符串或格式不匹配(比如你的版本号是五个数字,而服务器上的version是四个),第二种就会触发更新。默认的autoDownload=true
,表示是自动下载安装包。我们需要在AppUpdater.d.ts
文件中,定义一个变量,并通过autoUpdater.你的变量
去访问他,并修改他的值。如图:
在AppUpdater.d.ts
46/47行处作如下修改
在AppUpdater.js
161/168行处,分别做如下修改:
对,你没有看错,应用退出时自动安装
也需要做同样的处理。
2. 前面说了停止自动下载,那怎么恢复下载呢?
对,执行这个方法,就能恢复了。
3. 非electron-builder打包,生成sha512加密结果。
那么接下来,就是重点了,electron-builder在打包的过程中会生成latest.yml文件。但是,如果你用electron-packager就没得了,而自动更新下载下来的文件,如果不通过它的安全验证,就不能把文件转为能够安装的exe文件。那么该如何生成sha512加密结果呢?上代码!!!
const crypto = require('crypto')
const hash = crypto.createHash('sha512')
hash.setEncoding('base64')
const fs = require('fs')
let file = '.\OneClickTerminal Setup 1.0.22.exe'
let options = undefined
let rs = fs.createReadStream(file, {
...options,
highWaterMark: 1024 * 1024
})
rs.on('data', (data) => {
hash.update(data)
})
rs.on('end', () => {
hash.digest()
hash.end()
console.log(hash.read())
})
这个代码需要在node环境中执行哦!至于为什么我会知道这个加密方式,就别问了,都是泪。。。/(ㄒoㄒ)/~~