因为公司项目需求,需要做一个检查更新的功能,但是不需要让用户重新安装,只需要替换更新的部分,重启应用完成更新。
开始分析
- 我最开始是这么想的
我觉得逻辑没问题啊,于是开始查找资料,发现electron有自带的热更新,研究了一上午,发现好像并没有怎么好用啊,还发现似乎自能保存在c盘,那用户不安装在c盘咋整。果断换了方法。
于是开始研究用node实现,发现似乎可行,操作难度不大,我整理了好多的问题,都给一一解决了,但是最后一步把我卡死了。因为文件资源在占用中,不能替换,必须关闭程序,那么关闭程序就不会执行后面替换的代码了。一度陷入了沉思。
于是我又整理了下思路。
- 然后就有了想法
1、听说electron对于app与app.asar的优先度不同,app优先于app.asar,可以借这个方法来实现。但是好像比较绕,那就先放弃了。
2、似乎可以监听electron的close事件,然后执行程序。不过用了下,用处不大,因为我app.quit()后,进程关闭了。
3、通过子进程实现。先打开子进程,然后关闭主进程,执行子进程的代码。或者通过子进程调用另外的文件。感觉可行。
最后的思路
重新收拾心情,轻装上路。
先判断版本号,如果本地的版本号小于线上版本号,获取文件地址,然后下载文件地址的文件,以流的形式下载并写入临时文件,当然,如果不存在临时文件的话,先创建一个,有的话,就直接写入。然后对保存的文件进行重命名。最后执行子进程调用bat复制文件的命令,同时关闭主进程,然后打开程序,完成更新。如果是后端服务,则调用bat执行stop服务的命令,然后复制文件,执行start的命令,最后打开程序,以完成更新。