解决 electron-forge 打包的 setup.exe 在安装动画未结束前就开了程序的主界面问题

发布时间 2023-08-16 22:47:57作者: 暗恋桃埖源

问题描述:

electron-forge 打包的 setup.exe 在安装动画未结束前就开了程序的主界面问题。

问题演示图片:

修复后的演示图片:

原因

这种 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

参考

Squirrel.Windows

electron-windows-installer

electron-squirrel-startup

electron-builder