【问题标题】:Electron app auto launch shows an additional window due to incorrect app path由于应用程序路径不正确,Electron 应用程序自动启动会显示一个额外的窗口
【发布时间】:2020-11-03 21:41:26
【问题描述】:

我使用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

main.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"`
      ]
    });
  }
});

我没有完成这项工作的所有想法。任何人的任何帮助都将不胜感激:)

【问题讨论】:

    标签: javascript node.js electron


    【解决方案1】:

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

    所以,我禁用了在开发模式下启动应用程序,只在生产模式下使用以下命令运行它:

    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"`
          ]
        });
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-19
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2021-02-10
      相关资源
      最近更新 更多