Автоматический запуск приложения Electron показывает дополнительное окно из-за неправильного пути приложения - PullRequest
0 голосов
/ 20 марта 2020

Я использую app.setLoginItemSettings(settings) для автоматического запуска приложения при запуске системы. Пример, приведенный в Electron API do c 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 here

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 Путь пакета , но все же на удачу:

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

Мне не хватает всех идей, которые у меня есть, чтобы сделать эту работу. Буду очень признателен за любую помощь:)

1 Ответ

0 голосов
/ 20 марта 2020

Я наконец понял это после нескольких часов расследования. Приведенный выше код просто отлично работал с самого начала. Однако каким-то образом 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"`
      ]
    });
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...