【问题标题】:Where do I execute my on-first-start functions in my Electron app?在我的 Electron 应用程序中,我在哪里执行我的首次启动功能?
【发布时间】:2020-08-13 01:54:20
【问题描述】:

我使用的是 Electron 9,我有一个主进程和一个渲染进程。在我的应用程序第一次启动时,我想执行一些在第二次运行时未执行的代码。

Electron 是否有专门的位置供我执行此操作?非常感谢任何帮助!

【问题讨论】:

  • this API,但我认为这里的想法是一次只能运行一个实例。您可能必须在开始时向文件写入计数器,并在关闭时减少它以跟踪此情况。此外,您是否对同时运行的一组应用程序的首次启动感兴趣?还是当前 Windows 会话的第一次启动,还是什么?
  • 谢谢!我会调查一下。我的意思是一般来说只是安装后第一次启动应用程序,所以我可以在用户目录中创建一些默认首选项

标签: node.js electron


【解决方案1】:
  1. 使用 app.getPath('userData') - 它是当前用户的应用数据的专用位置(例如,在 Windows 中,它将指向类似 AppData/Roaming/app-name/ 的内容)
  2. 启动时使用:
app.on('ready', () => {
  const firstTimeFilePath = path.resolve(app.getPath('userData'), '.first-time-huh');
  let isFirstTime;
  try {
    fs.closeSync(fs.openSync(firstTimeFilePath, 'wx'));
    isFirstTime = true;
  } catch(e) {
    if (e.code === 'EEXIST') {
      isFirstTime = false;
    } else {
      // something gone wrong
      throw e;
    }
  }

  // ...
});
  1. 利润!

https://nodejs.org/api/fs.html#fs_file_system_flags - 为什么使用wx 标志 https://nodejs.org/api/fs.html#fs_fs_opensync_path_flags_mode - fs.openSync() https://www.electronjs.org/docs/api/app#appgetpathname - app.getPath()

如果您想在第一次运行时写出默认首选项并在下次运行时读取它们,请尝试以下操作:

import defaults from './default_preferences.json'; // will work for plain js objects too

let prefs = defaultPrefs;

app.on('ready', () => {
  const prefsPath = path.resolve(app.getPath('userData'), 'prefs.json');
  let isFirstTime;
  try {
    fs.writeFileSync(prefsPath, JSON.stringify(defaultPrefs), { flag: 'wx' });
    isFirstTime = true;
  } catch (e) {
    if (e.code === 'EEXIST') {
      // slight posibility of races, you can eleminate it by using `singleInstanceLock` or waiting loop for `write` flag
      prefs = require(prefsPath);
      isFirstTime = false;
    } else {
      // something gone wrong
      throw e;
    }
  }

  ...
});

【讨论】:

  • 非常感谢!这几乎就是我所需要的,但最后一个关于创业的问题。这进入了我的main.ts,但我想导入一个具有 init 函数的渲染器模块(它会创建一堆文件)。它位于./app/prefs,但它不允许我这样做,因为在启动时它无法从主进程中找到prefs。你对此有什么暗示吗?我真的需要把它分开吗?或者我也可以在main.ts 中使用这个模块吗?
  • 您能详细说明一下吗?你的文件结构是什么?
  • 主文件是./main.ts,创建这些默认文件的文件位于./src/app/core/prefs.ts
  • 啊,你想在第一次运行时在 userData 中创建 prefs.json,然后在接下来的运行中导入它?
  • 对不起,我想创建一个prefs.json,由prefs.ts在第一次启动时创建
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
相关资源
最近更新 更多