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
相关产品推荐
相关产品推荐

