移除代码签名后Electron应用自动更新失效,求解决方案
问题解决:移除代码签名后Electron自动更新失败
环境信息
- electron-builder: 21.2.0
- Electron版本: 7.3.3
- Electron Updater: 4.3.5
- 目标平台: Windows
问题描述
此前通过代码签名分发Electron应用,因证书过期移除签名相关配置后重新分发,目前自动更新功能报错无法运行,提示新版本未被应用所有者签名。
错误信息
[2024-10-15 16:00:40.289] [info] Error: New version 1.1.31 is not signed by the application owner: publisherNames: ARR CO,.Ltd, raw info: { "SignerCertificate": null, "TimeStamperCertificate": null, "Status": 2, "StatusMessage": "C:\\Users\\owner\\AppData\\Local\\11-updater\\pending\\temp-11-setup-1.1.31.exe 文件未进行数字签名。当前系统无法执行此脚本。有关脚本执行和执行策略设置的详细信息,请参阅about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID=135170)。" } at t.newError (C:\Users\owner\AppData\Local\Programs\11\resources\app.asar\background.js:1:5792) at Object.task (C:\Users\owner\AppData\Local\Programs\11\resources\app.asar\background.js:1:162458) at async m.executeDownload (C:\Users\owner\AppData\Local\Programs\11\resources\app.asar\background.js:1:72345)
当前Windows平台electron-builder配置
win: { icon: '../public/icon/main.ico', target: [ { target: 'nsis', arch: ['ia32'], }, ], },
解决方案
问题核心是旧版本应用默认启用了签名验证机制,此前签名过的版本会要求后续新版本的签名信息与旧版本匹配,现在新版本未签名,导致验证不通过触发更新失败。
1. 禁用更新签名验证
在electron-updater的配置中添加verifyUpdateCodeSignature: false(适配你使用的4.3.5版本),或者设置publisherName: null,跳过签名校验步骤。
示例配置(在应用的更新逻辑代码中,如background.js):
// 禁用签名验证 autoUpdater.config.verifyUpdateCodeSignature = false; // 或者在设置Feed URL时配置 autoUpdater.setFeedURL({ url: "你的更新源地址", publisherName: null });
2. 推送过渡版本(针对已安装旧签名版本的用户)
如果直接推送禁用验证的新版本无法被旧版本用户接收,需要先打包一个禁用签名验证的过渡版本(无需签名),让用户先更新到该版本,之后再推送后续版本就不会再触发签名验证错误。
3. 系统执行策略排查(可选)
错误信息中提到的执行策略提示,是Windows PowerShell的限制,但并非核心问题。如果完成前两步后仍有异常,可临时将执行策略调整为RemoteSigned,但优先通过前两步解决签名验证问题。
注意:禁用签名验证会降低更新安全性,若后续重新获取代码签名证书,需恢复签名配置及验证逻辑。
内容的提问来源于stack exchange,提问作者기보람
相关产品推荐
相关产品推荐

