解决 electron-forge 打包的 setup.exe 在安装动画未结束前就开了程序的主界面问题
问题描述
electron-forge
打包的 setup.exe
在安装动画未结束前就开了程序的主界面问题。
问题演示图片
我这里把默认安装程序的图片改成了海绵宝宝, 修改方法见 Squirrel loadingGif
修复后的演示图片
原因
这种 setup.exe
被称为 Squirrel.Windows
为什么 安装动画未结束就启动了程序,原因在下面的文档里,
这里是 electron-forge
相关文档:Handling startup events
大概的意思是:
Squirrel
将在首次运行、更新和卸载时使用命令行标志调起您的应用程序。这样你就可以通过是否可以获取到相关命令行参数,来判断程序当前的状态,你的应用应尽早处理这些事件在主进程中,并在处理这些事件后立即退出(不要进行创建 BrowserWindow
或其它的一些操作),这一点非常重要。
· 会给你的应用一小段时间(~15 秒)
来处理这些操作并退出。
文档里提到了这个包 electron-squirrel-startup ,此包进行了对这些事件的简单处理。
使用很方便,直接将其引入到项目中即可。
调起主程序的实现详情请看 electron installer。
代码
主进程主要代码:
const { app, BrowserWindow } = require('electron')
async function main() {
if(require('electron-squirrel-startup')) {
app.quit()
return
}
await app.whenReady()
const win = new BrowserWindow({
width: 800,
height: 600
})
await win.loadFile('index.html')
}
main().catch(console.error)
总结
在 Squirrel
程序在 安装、更新、卸载等阶段,会通过调起主程序的方式通知到主程序,我们要把这些启动方式和用户主动打开的方式区别开来。
另外:如果你想在安装程序的时候可以选择安装位置和显示安装进度,可以选择另一个 Electron
的打包工具 electron-builder。