- 删除残留的注册表信息。这种方法比较繁琐,但是可以解决问题。在安装新版本之前,你需要删除之前安装的版本所残留的注册表信息。
- 修改打包配置文件中的appid 但是如果appid是固定的 则不能使用这个方案
这是我项目的打包配置
electron-builder.json
{
"productName": "name",
"appId": "appId",
"directories": {
"output": "release/v${version}"
},
"files": [
"dist-electron",
"dist"
],
"publish": [
{
"provider": "generic",
"url": ""
}
],
"asar": true,
"nsis": {
"oneClick": false,
"perMachine": true,
"shortcutName": "${productName}",
"uninstallDisplayName": "${productName}",
"runAfterFinish": true,
"deleteAppDataOnUninstall": true,
"allowToChangeInstallationDirectory": true,
"include": "dist/installer.nsh",
"guid": "b96a0cd0-6202-4088-9981-15fdd925595c"
},
"win": {
"icon": "dist/favicon.ico",
"artifactName": "${productName}.${ext}",
"requestedExecutionLevel": "requireAdministrator"
},
"mac": {
"icon": "dist/favicon.icns",
"artifactName": "${productName}_${version}.${ext}",
"target": [
"dmg"
]
},
"linux": {
"target": [
"AppImage",
"deb"
],
"icon": "dist/favicon.ico",
"artifactName": "${productName}.${ext}",
"desktop": {
"Icon": "/opt/electron-pure-admin/resources/app/dist/favicon.ico"
}
}
}
- 通过修改nsis中guid来达到要求 guid是有规则的 不能随便填写 这个方法更灵活些 不需要每次打包的时候都修改代码 只需要进行相应配置即可
- 首先需要新建一个generate-guid.js文件用来每次打包的时候生成一个新的guid
function guid() { // 这是在网上找的guid生成算法
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
const r = (Math.random() * 16) | 0,
v = c == "x" ? r : (r & 0x3) | 0x8;
return v.toString(16);
});
}
const fs = require("fs");
// 生成新的GUID
const newGuid = guid();
// 读取package.json文件
const electronJson = JSON.parse(fs.readFileSync("electron-builder.json"));
// 将新的GUID写入package.json文件
electronJson.nsis.guid = newGuid;
fs.writeFileSync(
"electron-builder.json",
JSON.stringify(electronJson, null, 2)
);
- 其次在package.json中添加一行预打包配置代码来执行generate-guid.js文件
"prebuild": "node ./generate-guid.js"
- 然后运行npm run build就可以啦
知识点:
- nsis中的guid指的是什么
- nsis的guid可以随意赋值吗
- npm run xxx的执行顺序