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

如何用Electron-Forge构建安装时创建Windows服务的MSI/EXE

使用Electron-Forge构建带Windows服务的安装包

要实现安装时自动创建Windows服务,你需要结合node-windows工具和Electron-Forge的打包配置,以下是具体步骤:

1. 安装必要依赖

首先安装node-windows(用于创建Windows服务):

npm install node-windows --save-dev

若项目未通过Electron-Forge初始化,先执行:

npx create-electron-app my-app && cd my-app

2. 编写服务注册脚本

在项目根目录创建install-service.js,用于注册Windows服务:

const { Service } = require('node-windows');
const path = require('path');

// 安装后应用EXE的路径(根据实际应用名称修改)
const appExePath = path.join(process.env.PROGRAMFILES, 'MyApp', 'MyApp.exe');

const svc = new Service({
  name: 'MyApp后台服务',
  description: 'MyApp的后台运行服务',
  script: appExePath,
  args: ['--service'], // 传递参数标识服务模式
  env: [{ name: 'NODE_ENV', value: 'production' }]
});

// 安装完成后自动启动服务
svc.on('install', () => {
  svc.start();
});

// 执行服务安装
svc.install();

3. 编写服务模式判断逻辑

修改Electron主进程文件(如main.js),区分服务模式与GUI模式:

const { app } = require('electron');

// 检查是否以服务模式启动
const isService = process.argv.includes('--service');

if (isService) {
  // 服务模式:仅运行后台逻辑,不创建窗口
  app.whenReady().then(() => {
    console.log('MyApp后台服务已启动');
    // 在这里编写你的后台业务逻辑,比如API监听、定时任务等
  });

  // 服务模式下禁止自动退出
  app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') {
      // 不执行app.quit(),保持服务运行
    }
  });
} else {
  // 正常GUI模式:创建应用窗口
  app.whenReady().then(() => {
    const { BrowserWindow } = require('electron');
    const mainWindow = new BrowserWindow({
      width: 800,
      height: 600
    });
    mainWindow.loadFile('index.html');
  });

  app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') {
      app.quit();
    }
  });
}

4. 配置Electron-Forge打包规则

修改项目根目录的forge.config.js,配置安装后执行服务注册脚本:

针对EXE安装包(Squirrel)

module.exports = {
  packagerConfig: {
    icon: './icons/icon.ico', // 替换为你的应用图标路径
    extraResource: ['./install-service.js'] // 将服务脚本打包进安装包
  },
  makers: [
    {
      name: '@electron-forge/maker-squirrel',
      config: {
        name: 'MyApp',
        setupExe: 'MyApp安装包.exe',
        setupIcon: './icons/icon.ico',
        postInstall: './install-service.js' // 安装完成后执行服务注册
      }
    }
  ],
  plugins: [
    {
      name: '@electron-forge/plugin-auto-unpack-natives',
      config: {}
    }
  ]
};

针对MSI安装包

MSI打包需额外处理,推荐通过主进程首次运行时注册服务:

  1. 在main.js中添加首次运行检测,若未注册服务则调用node-windows的安装逻辑
  2. 使用electron-sudo工具提升权限执行服务注册脚本

5. 测试打包与安装

运行打包命令生成安装包:

npm run make

安装生成的EXE/MSI文件后,打开Windows服务管理器(services.msc),即可看到你注册的服务,状态应为正在运行。

注意事项

  • 服务注册需要管理员权限,Electron-Forge生成的安装包默认会请求管理员权限
  • 确保install-service.js中的应用路径与实际安装路径一致
  • 若服务启动失败,可查看node-windows生成的日志文件(默认在%TEMP%目录下)排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:20:34