"use strict" import { app, protocol, BrowserWindow, Menu, dialog } from "electron" import { createProtocol } from "vue-cli-plugin-electron-builder/lib" import { execFile } from "child_process" // require("./preload") // import path from "path" // import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer' const isDevelopment = process.env.NODE_ENV !== "production" // Keep a global reference of the window object, if you don't, the window will // be closed automatically when the JavaScript object is garbage collected. let win // Scheme must be registered before the app is ready protocol.registerSchemesAsPrivileged([{ scheme: "app", privileges: { secure: true, standard: true } }]) function runGoService() { let process = execFile("E:/Basic/plc-reader-service/plc-reader-service.exe", (err, stdout, stderr) => { if (err) { console.log(err) } }) process.stdout.on("data", (data) => { console.log("go:", data) }) process.stdout.on("close", (code) => { console.log("go exit", code) }) } function createWindow() { Menu.setApplicationMenu(null) // Create the browser window. win = new BrowserWindow({ width: 780, height: 820, resizable: true, webPreferences: { // Use pluginOptions.nodeIntegration, leave this alone // See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info // preload: path.join("src/", 'preload.js'), // nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION nodeIntegration: true } }) let appPath = app.getPath("exe") console.log("appPath", appPath) if (process.env.WEBPACK_DEV_SERVER_URL) { // Load the url of the dev server if in development mode win.loadURL(process.env.WEBPACK_DEV_SERVER_URL) if (!process.env.IS_TEST) win.webContents.openDevTools() } else { createProtocol("app") // Load the index.html when not in development win.loadURL("app://./index.html") } win.on("close", (e) => { console.log("win close") e.preventDefault() //阻止默认行为,一定要有 dialog .showMessageBox({ type: "info", title: "退出", defaultId: 0, message: "确定要关闭吗?请确认所有电子状态已恢复为client模式", buttons: ["返回", "退出"] }) .then((ret) => { console.log("rsp", ret) if (ret.response === 0) { // win.minimize(); //调用 最小化实例方法 } else { win = null //app.quit(); //不要用quit();试了会弹两次 app.exit() //exit()直接关闭客户端,不会执行quit(); } }) }) win.on("closed", () => { win = null }) } // Quit when all windows are closed. app.on("window-all-closed", () => { // On macOS it is common for applications and their menu bar // to stay active until the user quits explicitly with Cmd + Q if (process.platform !== "darwin") { app.quit() } }) app.on("activate", () => { // On macOS it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (win === null) { createWindow() } }) // This method will be called when Electron has finished // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. app.on("ready", async () => { if (isDevelopment && !process.env.IS_TEST) { // Install Vue Devtools // Devtools extensions are broken in Electron 6/7/<8.25 on Windows // See https://github.com/nklayman/vue-cli-plugin-electron-builder/issues/378 for more info // Electron will not launch with Devtools extensions installed on Windows 10 with dark mode // If you are not using Windows 10 dark mode, you may uncomment the following lines (and the import at the top of the file) // In addition, if you upgrade to Electron ^8.2.5 or ^9.0.0 then devtools should work fine // try { // await installExtension(VUEJS_DEVTOOLS) // } catch (e) { // console.error('Vue Devtools failed to install:', e.toString()) // } } createWindow() runGoService() }) // Exit cleanly on request from parent process in development mode. if (isDevelopment) { if (process.platform === "win32") { process.on("message", (data) => { if (data === "graceful-exit") { app.quit() } }) } else { process.on("SIGTERM", () => { app.quit() }) } } app.allowRendererProcessReuse = true