javascript - 由于应用程序路径不正确,Electron 应用程序自动启动会显示一个额外的窗口

标签 javascript node.js electron

我正在使用 app.setLoginItemSettings(settings)用于在系统启动时自动启动应用程序。 Electron API doc page 中给出的示例我相信适用于Windows。在 Electron main.js 中添加以下内容时, 应用程序 自动启动就好了但也显示了一个额外的窗口,上面写着我不想要的内容:

To run a local app, execute the following on the command line:
Users/abc/Documents/Repositories/app/node_modules/electron/dist/Electron.app/Contents/MacOS/Electron path-to-app
enter image description heremain.js
const appFolder = path.dirname(process.execPath)
const updateExe = path.resolve(appFolder, '..', 'Update.exe')
const exeName = path.basename(process.execPath)

import { app } from "electron";

app.on("ready", async() => {
  app.setLoginItemSettings({
    openAtLogin: true,
    path: updateExe,
    args: [
      '--processStart', `"${exeName}"`,
      '--process-start-args', `"--hidden"`
    ]
  });
});
我还尝试了以下 path但这也没有用:
const appFolder = path.dirname(process.execPath)
const updateExe = path.resolve(appFolder, '..', 'Update.exe')
const exeName = path.basename(process.execPath)

import { app } from "electron";

app.on("ready", async() => {
  app.setLoginItemSettings({
    openAtLogin: true,
    path: "/Applications/MyApp.app",
    args: [
      '--processStart', `"${exeName}"`,
      '--process-start-args', `"--hidden"`
    ]
  });
});
另外,也试过Electron Root Path package但仍然没有运气:
const appFolder = path.dirname(process.execPath)
const updateExe = path.resolve(appFolder, '..', 'Update.exe')
const exeName = path.basename(process.execPath)

import { app } from "electron";
import { rootPath } from "electron-root-path";

app.on("ready", async() => {
  app.setLoginItemSettings({
    openAtLogin: true,
    path: rootPath,
    args: [
      '--processStart', `"${exeName}"`,
      '--process-start-args', `"--hidden"`
    ]
  });
});
最后但并非最不重要的😎,也尝试了以下但仍然没有运气:
const appFolder = path.dirname(process.execPath)
const updateExe = path.resolve(appFolder, '..', 'Update.exe')
const exeName = path.basename(process.execPath)

import { app } from "electron";
import { rootPath } from "electron-root-path";

app.on("ready", async() => {
if (process.platform === "darwin") {
    app.setLoginItemSettings({
      openAtLogin: true,
      openAsHidden: true,
      path: rootPath
    });
  } else {
    app.setLoginItemSettings({
      openAtLogin: true,
      openAsHidden: true,
      path: updateExe,
      args: [
        "--processStart",
        `"${exeName}"`,
        "--process-start-args",
        `"--hidden"`
      ]
    });
  }
});
我没有完成这项工作的所有想法。任何人的任何帮助都将不胜感激:)

最佳答案

经过几个小时的调查,我终于弄明白了。上面的代码从一开始就运行良好。然而,不知何故 MyApp.app位于/Applications而我在我的代码中工作的那个都是在系统启动后执行的。因此,本地项目(开发项目)显示了附加窗口,因为它没有找到正确的应用程序路径。

因此,我在开发模式下禁用了应用程序启动,并且仅使用以下命令在生产模式下运行它:

import path from "path";
const appFolder = path.dirname(process.execPath);
const updateExe = path.resolve(appFolder, "..", "Update.exe");
const exeName = path.basename(process.execPath);

const isDevelopment = process.env.NODE_ENV !== "production";

app.on("ready", async () => {
  if (!isDevelopment) launchAtStartup();
}

function launchAtStartup() {
  if (process.platform === "darwin") {
    app.setLoginItemSettings({
      openAtLogin: true,
      openAsHidden: true
    });
  } else {
    app.setLoginItemSettings({
      openAtLogin: true,
      openAsHidden: true,
      path: updateExe,
      args: [
        "--processStart",
        `"${exeName}"`,
        "--process-start-args",
        `"--hidden"`
      ]
    });
  }
}

关于javascript - 由于应用程序路径不正确,Electron 应用程序自动启动会显示一个额外的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60774286/

相关文章:

electron - 在哪里为@electron-forge/maker-appx 设置图标/ Logo ?

vue.js - 在Vue中的函数之后让$ emit()同步执行

javascript - 奇怪的八进制行为

javascript - 我如何将此搜索转换为类似于 ubuntu 搜索

ajax - Node.js Web 应用程序需要什么架构?

reactjs - document.getSelection在reactjs环境下如何工作?

javascript - 在 Chrome 中禁用打印预览

Javascript MVC - 观察者位置

JavaScript 将文本粘贴到带有删除格式的 contenteditable

node.js - 如何防止 Node 在我的 NextJS/Express 应用程序中将异常记录到控制台?