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

如何用Electron-Builder自动签名.exe解决Windows自动更新签名问题

Electron Windows端自动更新签名问题解决

问题背景

在Electron Windows端实现自动更新时,触发错误提示:New version not signed by application owner,需为可执行文件签名解决该问题。同时执行自动构建发布命令时,签名流程报错文件找不到,手动签名则正常。

当前配置

package.json中的Windows构建配置

"win": {
  "publisherName": [
    "XXX"
  ],
  "icon": "build/icon.ico",
  "sign": "./sign.js"
},

初始sign.js签名脚本

exports.default = async function(configuration) {
  // 不要在文件中包含密码或敏感数据,改用环境变量存储
  // const CERTIFICATE_NAME = process.env.WINDOWS_SIGN_CERTIFICATE_NAME;
  // const TOKEN_PASSWORD = process.env.WINDOWS_SIGN_TOKEN_PASSWORD;

  require("child_process").execSync(
    // 示例使用JSign的签名命令
    `java -jar jsign.jar \
    --storetype GOOGLECLOUD \
    --storepass "$(gcloud auth print-access-token)" \
    --keystore "projects/XXX/locations/XXX/keyRings/XXX" \
    --alias "YYYY" \
    --certfile "ZZZZ" \
    --tsmode RFC3161 \
    --tsaurl http://timestamp.globalsign.com/tsa/r6advanced1 \
    './release/build/MyProgram Setup 6.4.1.exe'`
  );
};

遇到的具体问题

手动构建后执行签名可正常完成,但运行命令 electron-builder build --w --publish always 时,自动签名流程报错:

The file ./release/build/MyProgram Setup 6.4.1.exe couldn't be found

尝试添加{stdio:"inherit"}参数后问题仍未解决。同时存在疑问:自动更新是否必须签名?(日志提示未签名exe无法运行)

解决方法

修改sign.js脚本,使用electron-builder传递的configuration.path动态获取待签名文件路径,替代硬编码的固定路径:

exports.default = async function(configuration) {
  // 不要在文件中包含密码或敏感数据,改用环境变量存储
  // const CERTIFICATE_NAME = process.env.WINDOWS_SIGN_CERTIFICATE_NAME;
  // const TOKEN_PASSWORD = process.env.WINDOWS_SIGN_TOKEN_PASSWORD;
  console.log(configuration, "CONFIG for sign")
  require("child_process").execSync(
    // 示例使用JSign的签名命令
    `java -jar jsign.jar \
    --storetype GOOGLECLOUD \
    --storepass "$(gcloud auth print-access-token)" \
    --keystore "projects/XXXX/locations/XXX/keyRings/XXX" \
    --alias "XXX" \
    --certfile "./path/to/certfile" \
    --tsmode RFC3161 \
    --tsaurl http://timestamp.globalsign.com/tsa/r6advanced1 \
    "${configuration.path}"`,
    {
      stdio: "inherit"
    }
  );
};

关键说明

  • 自动更新必须签名:Electron自动更新机制要求新版本与旧版本使用同一证书签名,否则会触发签名不匹配错误;且Windows系统会拦截未签名的exe运行,日志也会明确提示未签名程序无法执行。
  • 修复核心:硬编码文件路径在自动构建流程中不可靠,版本号、临时构建路径可能动态变化,通过configuration.path可获取electron-builder实时传递的待签名文件的正确路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:05:14