【发布时间】:2021-03-17 03:44:44
【问题描述】:
我正在尝试创建一个电子应用程序,它将自动更新来自 github 的新版本。正在尝试为 mac 和 windows 执行此操作。
我已经能够通过关注this tutorial 成功创建并签署一个mac os .dmg 程序。结果是一个电子应用程序,当我在我的 mac 笔记本电脑上运行 npm run deploy 以获得新版本时,它将通过运行以下命令来构建和打包程序:electron-builder build --mac --win --publish always
mac os .dmg 文件按照教程中的说明工作,它检查我的 main.js 文件中的更新,如果发布了新版本,它将提示用户重新启动应用程序。
本教程应该也适用于 Windows,但生成并上传到我的 github 存储库发布选项卡的 windows.exe 似乎不会自动更新。在我已经发布 v1.0.3 之后,我通过运行我的应用程序 windows 便携式 .exe 文件来测试这一点:electron-auto-updater-1.0.2,所以它应该自动更新但永远不会,并且不会在我的电子应用程序窗口控制台中抛出任何错误。
我是否需要以不同的方式为电子签名我的 windows exe?最终,我正在尝试为具有自动更新功能的 Windows 10 创建一个最低限度的电子应用程序。我一直在网上查找并关注各种旧的教程博客文章,我链接的那个似乎是最新的(2019 年),我遵循了 mac os 笔记本电脑上签名过程的每一条说明,但我的代码在 windows 上不起作用:
package.json
{
"name": "electron-auto-updater",
"productName": "Electron tutorial app",
"description": "Application for electron tutorials",
"version": "1.0.4",
"main": "main.js",
"scripts": {
"start": "electron .",
"build": "electron-builder build --mac --win --publish never",
"deploy": "electron-builder build --mac --win --publish always",
"deploy-win": "electron-builder build --win --publish always",
"build-win": "electron-builder build --win --publish never"
},
"build": {
"appId": "yourAppId",
"afterSign": "scripts/notarize.js",
"mac": {
"icon": "build/icon.png",
"hardenedRuntime": true,
"gatekeeperAssess": false,
"entitlements": "build/entitlements.mac.plist",
"entitlementsInherit": "build/entitlements.mac.plist",
"target": [
"dmg",
"zip"
]
},
"dmg": {
"sign": false
},
"linux": {
"category": "TODO: fill here the category of your app",
"icon": "build/icon.png",
"target": [
"AppImage",
"deb"
]
},
"win": {
"target": "portable",
"icon": "build/icon.png"
}
},
"author": "",
"license": "ISC",
"devDependencies": {
"electron": "^11.0.3",
"electron-builder": "^22.9.1",
"electron-notarize": "^1.0.0",
"electron-winstaller": "^4.0.1"
},
"dependencies": {
"dotenv": "^8.2.0",
"electron-updater": "^4.3.5"
},
"repository": {
"type": "git",
"url": "https://github.com/MartinBarker/electron-auto-updater.git"
}
}
main.js
const { app, BrowserWindow, ipcMain } = require('electron');
const { autoUpdater } = require('electron-updater');
require('dotenv').config();
let mainWindow;
function createWindow () {
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true,
},
});
mainWindow.loadFile('index.html');
mainWindow.on('closed', function () {
mainWindow = null;
});
mainWindow.once('ready-to-show', () => {
try{
autoUpdater.checkForUpdatesAndNotify();
}catch(err){
console.log('autoUpdater.checkForUpdatesAndNotify(); err = ', err)
}
});
}
app.on('ready', () => {
createWindow();
});
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', function () {
if (mainWindow === null) {
createWindow();
}
});
ipcMain.on('app_version', (event) => {
event.sender.send('app_version', { version: app.getVersion() });
});
ipcMain.on('restart_app', () => {
autoUpdater.quitAndInstall();
});
autoUpdater.on('update-available', () => {
mainWindow.webContents.send('update_available');
console.log('update avail')
});
autoUpdater.on('update-downloaded', () => {
console.log('update downlaoded')
mainWindow.webContents.send('update_downloaded');
});
If I build on command prompt on my wind 10 computer I get this output in ym console: no error messages:
$1.0.4 deploy-win C:\Users\marti\Documents\projects\electron-auto-updater
electron-builder build --win --publish always
electron-builder version=22.9.1 os=10.0.18363
loaded configuration file=package.json ("build" field)
writing effective config file=dist\builder-effective-config.yaml
packaging platform=win32 arch=x64 electron=11.0.3 appOutDir=dist\win-unpacked
building target=portable file=dist\Electron tutorial app 1.0.4.exe archs=x64
s
【问题讨论】:
-
windows需要配置;见docs。
标签: node.js windows macos electron auto-update