gpt4 book ai didi

node.js - Electron 应用程序有多个后台服务正在运行并且退出时不会停止

转载 作者:太空宇宙 更新时间:2023-11-04 00:19:00 35 4
gpt4 key购买 nike

我刚刚构建了我的第一个 Electron 应用程序。但我注意到我的应用程序的 3 个服务随时在后台运行。当通过全局键盘快捷键激活应用程序时,一个实例会移动到事件应用程序部分。

退出时,只有一个实例消失,而另外两个实例继续运行。如果不从任务管理器手动停止这些服务,我就无法再次启动应用程序。

app.js

const { app, BrowserWindow, globalShortcut } = require("electron");
const path = require("path");
const url = require("url");

let win = null;

var shouldQuit = app.makeSingleInstance(function(commandLine, workingDirectory) {
// Someone tried to run a second instance, we should focus our window.
if (win) {
win.show();
}
});

if (shouldQuit) {
app.quit();
return;
}

app.on("ready", () => {

win = new BrowserWindow({
width: 1000,
height: 600,
transparent: true,
frame: false
});

win.on("close", () => {
win = null;
});

win.loadURL(
url.format({
pathname: path.join(__dirname, "app", "index.html"),
protocol: "file",
slashes: true
})
);

win.once('ready-to-show', () => {
win.show()
});

win.on("blur", () => {
win.hide();
});

win.on('window-all-closed', () => {
globalShortcut.unregisterAll();
if (process.platform !== 'darwin') {
app.quit()
}
});

const ret = globalShortcut.register('CommandOrControl+L', () => {
if(win == null) {
globalShortcut.unregisterAll();
return;
}
win.show();
});

if (!ret) {
console.log('registration failed')
}

app.on('will-quit', () => {
// Unregister all shortcuts.
globalShortcut.unregisterAll();
});

app.on('before-quit', () => {
win.removeAllListeners('close');
globalShortcut.unregisterAll();
win.close();
});

});

我之前遇到的错误是GlobalShortcut在关闭时没有注销,所以我将其添加到before-quitwindow-all-close事件中。这解决了它。

编辑:上述问题仅发生在生产代码上。在开发过程中,所有 3 个实例都关闭在一起。我使用的是 Windows 10 和 Electron 1.6.11。

最佳答案

只需将其添加到包含 Electron 模块的主 javascript 文件中即可

app.on('window-all-closed', () => {
app.quit()
})

关于node.js - Electron 应用程序有多个后台服务正在运行并且退出时不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45266928/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com