electron应用NSIS打包和更新指北

时间:2020-7-3 作者:admin

electron发展至今,已经相对完善,打包应用有electron-builder,更新有electron-updater,不过具体的使用方式还需要一定的摸索,在摸索过程中难免出现一些问题,在此描述下我遇到的问题和解决方法。

业务场景是,我们有一个electron应用,需要在mac和win两个平台下提供给用户,这个项目接手的时候打包配置已经比较完善,用的是electron-builder,不过更新有问题,总是更新失败,另外在win上有些用户打开会白屏,经过一番尝试发现用vista兼容模式打开可以避免白屏现象,因此我们考虑在打包过程中将兼容模式打开这一信息写入注册表。

1.写注册表

electron-builder本身支持引入nsis脚本,我们也做了一些尝试,不知道是不是使用姿势不对,使用include选项引入脚本,打包时一直报错,无法成功,于是只能选择将electron-builder的打包结果,win-unpacked文件夹,再用NSIS打包一遍

没有桌面客户端开发经历的同学可能不知道NSIS这个软件,百度一下教程也很多,比如这个

安装的时候,先安装NSIS本体,再安装NIS editor,不然打开NIS editor使用的时候,向导模式里有一步选择语言走不下去

用的时候,我们用NIS editor,会有一个向导帮助我们生成一个样例脚本,不过很多功能是需要我们拿着这个样例脚本自己去增删的,比如前面提到的写注册表,就可以通过WriteRegStr语句来完成

2.更新

electron-updater是根据electron-builder生成的yml文件(需要配置publish选项)来进行更新的,其中有一步是会验证安装包的sha值,NSIS打包后,这个验证显然就无法通过了,所以我就自己写了一个更新用的包electron-tiny-updater

支持yml文件也支持自己写一个json文件,需要把配置文件和更新包上传服务器或者CDN,需要更新的时候,先下载配置文件,进行版本比对,再下载安装包,下载安装包的时候会提供一个download-progress事件监听下载进度

const {tinyUpdater} =  require('electron-tiny-updater');
const path =  require('path');

const emitter = tinyUpdater({
  currentVersion: '1.0.2', // 当前应用的版本号,可以通过package.json来引入
  configType: 'yml', // 配置文件类型,支持yml和json格式两种
  configUrl: 'https://xxx.com/latest.yml', // 配置文件的url
  configFilename: 'latest.yml', // 配置文件名
  pkgFilename: 'app.exe', // 安装包名称
  filePath: path.join(__dirname, '../..') // 文件保存的路径
});

// 第一个参数total表示安装包的总大小,第二个参数length表示当前已下载的大小
emitter.on('download-progress', (total, length)=>{
  console.log(total, length, 'progress')
});

emitter.on('error', (e)=>{
  console.log(e, 'error')
});
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。