You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron Forge Squirrel安装器问题:安装时应用随加载GIF启停重启

Electron Squirrel安装时应用与加载GIF同时启动的解决方法

我开发了一款Electron应用,使用npm run make执行electron-forge make打包,过程无异常。但运行@electron-forge/maker-squirrel生成的Setup.exe时,应用会和加载GIF一起启动;GIF加载完成后,两者都会关闭并重新启动。我想避免应用在GIF关闭前显示或启动,该怎么解决?

依赖项

"dependencies": {
    "electron-squirrel-startup": "^1.0.0"
  },
  "devDependencies": {
    "@electron-forge/cli": "^7.2.0",
    "@electron-forge/maker-deb": "^7.2.0",
    "@electron-forge/maker-rpm": "^7.2.0",
    "@electron-forge/maker-squirrel": "^7.2.0",
    "@electron-forge/maker-zip": "^7.2.0",
    "@electron-forge/plugin-auto-unpack-natives": "^7.2.0",
    "electron": "28.0.0",
    "electron-reloader": "^1.2.3"
  }

脚本

"scripts": {
    "start": "electron-forge start",
    "package": "electron-forge package",
    "make": "electron-forge make",
    "publish": "electron-forge publish",
    "lint": "echo \"No linting configured\""
  },

已查阅文档

  • Electron Forge 配置 makers 文档
  • Electron Forge Squirrel.Windows 配置文档
  • electron-windows-installer 仓库文档
  • Squirrel.Windows 打包指南文档

解决方法

1. 优先处理Squirrel启动事件

Squirrel在安装、更新流程中会自动启动应用,这是导致提前启动的核心原因。在应用入口文件(如main.js)最顶部添加事件处理逻辑,让应用在安装阶段直接退出:

const { app } = require('electron');
const squirrelStartup = require('electron-squirrel-startup');

// 捕获Squirrel安装/更新相关事件,直接退出应用
if (squirrelStartup) {
  app.quit();
  return;
}

// 你的应用正常启动逻辑
function createWindow() {
  // ... 窗口创建代码
}

app.whenReady().then(() => {
  createWindow();
  // ... 其他业务逻辑
});

2. 优化窗口显示时机

即使处理了Squirrel事件,也建议调整窗口显示逻辑,确保页面加载完成后再显示窗口,避免闪烁:

app.whenReady().then(() => {
  const mainWindow = new BrowserWindow({
    show: false, // 初始隐藏窗口
    // ... 其他窗口配置
  });

  mainWindow.loadFile('index.html');

  // 页面加载完成后再显示窗口
  mainWindow.webContents.on('did-finish-load', () => {
    mainWindow.show();
  });
});

3. 调整Squirrel Maker配置(可选)

在forge.config.js中配置Squirrel参数,进一步优化安装流程:

module.exports = {
  // ... 其他配置
  makers: [
    {
      name: '@electron-forge/maker-squirrel',
      config: {
        name: '你的应用名称',
        noMsi: true, // 禁用MSI安装包,简化安装流程
        loadingGif: './assets/loading.gif' // 自定义加载GIF路径
      },
    },
    // ... 其他打包配置
  ],
};

核心原理:Squirrel在安装时会向应用传入特定启动参数,我们通过捕获这些参数让应用立即退出,从而避免在安装加载GIF期间显示应用窗口。


内容的提问来源于stack exchange,提问作者Ouariachi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 17:46:30