在构建过程中运行Windows / NSIS电子构建器之后,我们的开发团队设置了一个构建脚本,用于在部署前对exe进行代码签名。到达服务器后,电子更新程序由于sha512校验和不匹配而失败(在安装过程中,错误发生在完全下载之后)。我还尝试从服务器上提取exe文件,并从运行codesign,然后重新上传。自动更新程序也会发生同样的错误。
是否不可能在exe生成后对其进行签名,并且仍然允许自动更新程序工作?
签名:
signtool.exe sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /sha1 value "path"
日志:
Error: sha512 checksum mismatch, expected [value], got [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"
}
}
发布于 2020-02-13 13:08:22
如果仍在寻找手动生成电子校验和的人,您可以使用这里提到的脚本https://github.com/electron-userland/electron-builder/issues/3913#issuecomment-504698845
我已经测试过它,它工作得很好,电子能够用手动生成的校验和更新应用程序到版本。
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);
发布于 2017-09-27 14:14:23
根据对GH中电子生成器问题的回应,不允许在生成后对其进行签名,这不幸地改变了我们的构建过程。
发布于 2022-08-24 07:56:55
在为这个问题奋斗了这么多小时之后,下面是我发现的:(案例: win,nsis)
为了解决这个问题,我使用了上面的答案中给出的签名脚本。当我完成构建和签名我的.exe时,我使用上面的脚本重新计算它的散列,然后相应地更新latest.yml。
当我完成那次自动更新时,希望它能帮助><。
https://stackoverflow.com/questions/46407362
复制相似问题