如何使用电子实现后台服务。
我遇到麻烦任何人都可以告诉我如何开始背景 使用电子服务甚至在关闭应用程序后运行。我有 尝试了很多解决方案,但所有解决方案都在关闭后停止服务 应用程序。
答案 0 :(得分:2)
电子不适合在后台运行。如果你要结束了 应用程序然后它将终止与它相关的所有进程。 Electron仅用于提供GUI层。毕竟它是混合应用程序,它不与核心OS服务交互生活 本身就像后台服务。
除此之外还有两个选项:
答案 1 :(得分:0)
您可以使用纸盘。这是一个示例(source):
"use strict";
// [run the app]
// $ npm install electron
// $ ./node_modules/.bin/electron .
const {app, nativeImage, Tray, Menu, BrowserWindow} = require("electron");
let top = {}; // prevent gc to keep windows
app.once("ready", ev => {
top.win = new BrowserWindow({
width: 800, height: 600, center: true, minimizable: false, show: false,
webPreferences: {
nodeIntegration: false,
webSecurity: true,
sandbox: true,
},
});
top.win.loadURL("https://google.com/");
top.win.on("close", ev => {
//console.log(ev);
ev.sender.hide();
ev.preventDefault(); // prevent quit process
});
// empty image as transparent icon: it can click
// see: https://electron.atom.io/docs/api/tray/
top.tray = new Tray(nativeImage.createEmpty());
const menu = Menu.buildFromTemplate([
{label: "Actions", submenu: [
{label: "Open Google", click: (item, window, event) => {
//console.log(item, event);
top.win.show();
}},
]},
{type: "separator"},
{role: "quit"}, // "role": system prepared action menu
]);
top.tray.setToolTip("hello electrol");
//top.tray.setTitle("Tray Example"); // macOS only
top.tray.setContextMenu(menu);
// Option: some animated web site to tray icon image
// see: https://electron.atom.io/docs/tutorial/offscreen-rendering/
top.icons = new BrowserWindow({
show: false, webPreferences: {offscreen: true}});
top.icons.loadURL("https://trends.google.com/trends/hottrends/visualize");
top.icons.webContents.on("paint", (event, dirty, image) => {
if (top.tray) top.tray.setImage(image.resize({width: 16, height: 16}));
});
});
app.on("before-quit", ev => {
// BrowserWindow "close" event spawn after quit operation,
// it requires to clean up listeners for "close" event
top.win.removeAllListeners("close");
// release windows
top = null;
});
答案 2 :(得分:0)
是的,可以使用电子过程npm库。 ref:-https://www.npmjs.com/package/electron-process
首先,您必须注册要在后台运行的模块,只需创建简单的background.html,
-background.html-- 在脚本标签中添加以下行,
const background = require('electron-process').background;
background.registerModule(require('../main/snippets/SnippetsManager'));
在主要过程中,只需创建一个浏览器窗口即可在其中运行background.html并将其保留为隐藏窗口,
-main.js-
app.once("ready", ev => {
service = new BrowserWindow({
width: 80, height: 60, center: true, minimizable: false, show: false,
webPreferences: {
nodeIntegration: false,
webSecurity: true,
sandbox: true,
},
});
service.loadURL("file://' + __dirname + '/background.html");
service.on("close", ev => {
ev.sender.hide();
ev.preventDefault(); // prevent quit process
});
});
希望能有所帮助, 问候。