在 Windows 上安装更新时,Electron 自动更新失败
Electron auto update fails silently when installing update on Windows
我有一个电子应用程序,它使用 electron-builder
来构建、打包和发布应用程序。
我有以下自动更新代码:
autoUpdater.logger = log;
autoUpdater.logger.transports.file.level = "info";
autoUpdater.autoDownload = true;
const updateCheck = () => {
autoUpdater.checkForUpdates().then(resp => {
log.info("autoUpdate response:");
log.info(resp);
});
};
app.on("ready", async () => {
log.info(`Version: ${app.getVersion()}`);
autoUpdater.on("update-downloaded", () => {
log.info("update downloaded");
setImmediate(() => {
try {
log.info("installing update");
// app.relaunch();
autoUpdater.quitAndInstall();
} catch (err) {
log.error("Error installing update");
log.error(err);
}
});
});
autoUpdater.on("error", err => {
log.error("AutoUpdater error");
log.error(err);
});
updateCheck();
schedule.scheduleJob("*/10 * * * *", updateCheck);
});
当我发布新版本时,自动更新程序检测到它,成功下载它,然后尝试安装它。
在安装更新的过程中,进度条填满一半,然后消失。
应用程序保持关闭状态,进度条消失后不会自动重新启动。
当我手动重新启动它时,它仍然是旧版本。它检测到有一个已经下载的更新,并尝试安装它,结果相同(进度条填充一半然后消失,之后应用程序保持关闭状态)。
我的日志文件没有显示来自 catch 块或 autoUpdater.on("error")
回调的错误。
位置 C:\Users\<User>\AppData\Local\<app-name>-updater
有一个安装以前版本的 installer.exe
文件,以及一个包含新版本安装程序的 pending
文件夹。手动执行此安装程序会导致应用程序无错误更新。
我尝试使用 checkForUpdatesAndNotify
而不是 checkForUpdates
进行测试(并注释掉对 quitAndInstall
的调用),并且它像宣传的那样工作,但是我想确保更新是立即安装,而不是等待用户自行退出。
我该如何进一步调试呢?为什么我没有看到任何错误?我应该在哪里寻找它们?我做错了什么?
小问题:你用过吗
使您的应用 window 关闭并最小化到托盘?
如果你这样做了,你应该 application.isQuiting = true
在调用 autoUpdater.quitAndInstall();
之前
否则 application.close()
函数在 contextMenu
.
以外的任何地方几乎都被阻止了
问题原来是我用选项 closable: false
创建了 window,阻止了自动更新程序关闭它。删除此设置后自动更新程序完美运行
我有一个电子应用程序,它使用 electron-builder
来构建、打包和发布应用程序。
我有以下自动更新代码:
autoUpdater.logger = log;
autoUpdater.logger.transports.file.level = "info";
autoUpdater.autoDownload = true;
const updateCheck = () => {
autoUpdater.checkForUpdates().then(resp => {
log.info("autoUpdate response:");
log.info(resp);
});
};
app.on("ready", async () => {
log.info(`Version: ${app.getVersion()}`);
autoUpdater.on("update-downloaded", () => {
log.info("update downloaded");
setImmediate(() => {
try {
log.info("installing update");
// app.relaunch();
autoUpdater.quitAndInstall();
} catch (err) {
log.error("Error installing update");
log.error(err);
}
});
});
autoUpdater.on("error", err => {
log.error("AutoUpdater error");
log.error(err);
});
updateCheck();
schedule.scheduleJob("*/10 * * * *", updateCheck);
});
当我发布新版本时,自动更新程序检测到它,成功下载它,然后尝试安装它。
在安装更新的过程中,进度条填满一半,然后消失。
应用程序保持关闭状态,进度条消失后不会自动重新启动。
当我手动重新启动它时,它仍然是旧版本。它检测到有一个已经下载的更新,并尝试安装它,结果相同(进度条填充一半然后消失,之后应用程序保持关闭状态)。
我的日志文件没有显示来自 catch 块或 autoUpdater.on("error")
回调的错误。
位置 C:\Users\<User>\AppData\Local\<app-name>-updater
有一个安装以前版本的 installer.exe
文件,以及一个包含新版本安装程序的 pending
文件夹。手动执行此安装程序会导致应用程序无错误更新。
我尝试使用 checkForUpdatesAndNotify
而不是 checkForUpdates
进行测试(并注释掉对 quitAndInstall
的调用),并且它像宣传的那样工作,但是我想确保更新是立即安装,而不是等待用户自行退出。
我该如何进一步调试呢?为什么我没有看到任何错误?我应该在哪里寻找它们?我做错了什么?
小问题:你用过吗
如果你这样做了,你应该 application.isQuiting = true
在调用 autoUpdater.quitAndInstall();
之前
否则 application.close()
函数在 contextMenu
.
问题原来是我用选项 closable: false
创建了 window,阻止了自动更新程序关闭它。删除此设置后自动更新程序完美运行