electron - 代码签名后校验和不匹配 Electron Builder/Updater

标签 electron code-signing electron-builder

在构建过程中运行适用于 Windows/NSIS 的 electron-builder 之后,我们的开发运营团队设置了一个构建脚本,该脚本运行以在部署前对 exe 进行代码签名。到达服务器后,electron-updater 因 sha512 校验和不匹配而失败(错误发生在安装过程中,在完全下载之后)。我还尝试从服务器上拉下 exe 文件并从 Visual Studio CMD 运行代码签名实用程序,然后重新上传。自动更新程序也因同样的错误而失败。

在生成 exe 之后不能对其进行签名,并且仍然允许自动更新程序工作吗?

签名:

signtool.exe sign/tr http://timestamp.digicert.com/td sha256/fd sha256/sha1 值“路径”

日志:

错误:sha512 校验和不匹配,预期 [value],得到 [different value]

package.json 中的配置:

"build": {
    "appId": "com.stripped.stripped.stripped",
    "directories": {
        "output": "dist-exe",
        "app": "dist"
    },
    "win": {
        "target": "nsis",
        "icon": "dist/assets/favicon/favicon-256x256.ico",
        "verifyUpdateCodeSignature": false,
        "publish": {
            "provider": "generic",
            "url": "##{ElecronAppUpdaterLocation}##"
        }
    },
    "nsis": {
        "artifactName": "Setup_${version}.${ext}",
        "installerIcon": "dist/assets/favicon/favicon-256x256.ico",
        "installerHeaderIcon": "dist/assets/favicon/favicon-256x256.ico"
    }
}

最佳答案

如果有人仍在寻找手动生成 Electron 校验和,您可以使用这里提到的脚本 https://github.com/electron-userland/electron-builder/issues/3913#issuecomment-504698845

我已经测试过它并且工作正常,Electron 能够将应用程序更新到具有手动生成的校验和的版本。

const path = require('path');
const fs = require('fs');
const crypto = require('crypto');

const YOUR_FILE_PATH = '';  //  POPULATE THIS

function hashFile(file, algorithm = 'sha512', encoding = 'base64', options) {
  return new Promise((resolve, reject) => {
    const hash = crypto.createHash(algorithm);
    hash.on('error', reject).setEncoding(encoding);
    fs.createReadStream(
      file,
      Object.assign({}, options, {
        highWaterMark: 1024 * 1024,
        /* better to use more memory but hash faster */
      })
    )
      .on('error', reject)
      .on('end', () => {
        hash.end();
        console.log('hash done');
        console.log(hash.read());
        resolve(hash.read());
      })
      .pipe(
        hash,
        {
          end: false,
        }
      );
  });
}

const installerPath = path.resolve(
  __dirname,
  YOUR_FILE_PATH
);

hashFile(installerPath);

关于electron - 代码签名后校验和不匹配 Electron Builder/Updater,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46407362/

相关文章:

javascript - 生产过程中如何在Electron React App中路由

electron - 用户名不是提供者的成员

javascript - 如何使用 Electron 注册可在焦点之外使用的键盘快捷键?

windows - Windows 证书存储有哪些好处?

python - 关于 Mac 代码签名、公证、磁盘镜像和 Python

iphone - 命令/usr/bin/codesign 失败,退出代码为 1

javascript - Electron-Builder Updater仅卸载当前安装

node.js - 如何在Electron中实现过程同步?

electron - 如何在网站代码中格式化文件系统路径,我需要移植到 Electron 版

windows - 是否可以将Skype 8设置为(临时)使用非标准配置文件数据目录?