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

如何为Electron Forge的Wix MSI安装器实现自动更新机制?

为Wix MSI安装器实现Electron自动更新机制

1. 复用现有自动更新核心逻辑

Electron的autoUpdater模块本身不依赖Squirrel,只是Squirrel是默认Windows更新后端。你之前基于latest.yml的更新检查逻辑可以直接保留,只需要替换更新后端为支持MSI的方案,无需大幅修改应用内的更新触发代码。

2. 替换更新后端为MSI兼容方案

放弃Squirrel的nupkg更新方式,改用MSI安装包完成更新:

  • 当autoUpdater检测到新版本时,下载对应版本的MSI安装包(而非Squirrel的nupkg文件)
  • 下载完成后,调用系统命令启动MSI静默安装,示例参数:msiexec /i 路径/new-version.msi /qn,实现无弹窗自动升级
  • 注意:MSI版本号必须符合Windows Installer规则(格式为x.x.x.x,前三位为主版本,第四位为修订号),且所有版本的ProductCode需保持一致,UpgradeCode必须固定,确保Windows Installer识别为同一应用的升级。

3. 调整latest.yml配置

修改原Squirrel格式的latest.yml,适配MSI更新:

version: 1.1.0
url: https://你的发布服务器地址/app-v1.1.0.msi
sha256: 安装包的SHA256校验值
  • url字段指向新版本MSI的下载地址
  • version与MSI安装包的版本号严格一致
  • 保留sha256用于校验安装包完整性

4. 编写更新完成后的执行逻辑

监听autoUpdater的update-downloaded事件,处理应用关闭与MSI启动:

const { autoUpdater, app } = require('electron-updater');
const { exec } = require('child_process');
const path = require('path');

// 配置更新源
autoUpdater.setFeedURL({
  provider: 'generic',
  url: 'https://你的发布服务器地址/releases/'
});

// 监听更新下载完成事件
autoUpdater.on('update-downloaded', (info) => {
  // 关闭当前应用实例
  app.quit();
  // 启动MSI静默安装
  const msiPath = path.join(info.downloadedFile);
  exec(`msiexec /i "${msiPath}" /qn`, (err) => {
    if (err) console.error('更新安装失败:', err);
  });
});

5. 配置Electron Forge的Wix构建参数

在forge.config.js中切换构建器为Wix,并固定关键配置:

module.exports = {
  // 其他配置...
  makers: [
    {
      name: '@electron-forge/maker-wix',
      config: {
        language: 1033,
        upgradeCode: '固定的GUID字符串', // 必须全局唯一且所有版本保持一致
        version: require('./package.json').version, // 与package.json版本同步
        // 可选:配置安装目录、快捷方式等Wix参数
      }
    }
  ]
};

6. 测试更新流程

  • 发布旧版本MSI并安装到测试机
  • 上传新版本MSI和对应latest.yml到发布服务器
  • 启动旧版本应用,验证更新检测、下载、静默安装、重启到新版本的全流程是否正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 14:52:34