node.js - 在我的Electron应用程序中,我应在哪里执行首次启动功能?

标签 node.js electron

我正在使用Electron 9,我有一个主要过程和一个渲染过程。在我的应用程序的第一次启动时,我想执行一些第二次运行未执行的代码。
Electron是否有专用位置我应该在该位置进行操作?任何帮助深表感谢!

最佳答案

  • 使用app.getPath('userData')-它是当前用户的应用程序数据的专用位置(例如,在Windows中,它将指向类似AppData/Roaming/app-name/的位置)
  • 在启动时使用:
  • 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;
        }
      }
    
      // ...
    });
    
  • 利润!

  • 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;
        }
      }
    
      ...
    });
    

    关于node.js - 在我的Electron应用程序中,我应在哪里执行首次启动功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63380478/

    相关文章:

    javascript - 未检测到 Electron 和 vuejs 更改

    javascript - 如何检查用户是否已通过身份验证以访问特定路径(MEAN STACK)

    javascript - nodejs中的 'console.time'是同步的还是异步的?

    node.js - WixToolset 目录结构副本

    mysql - 我可以使用node.js将mysql查询结果调用到html文件中吗?

    javascript - Electron.js : addEventListener() doesn't work and I'm not getting any error

    .net - 将通知从网络服务器推送到 winforms 客户端应用程序

    angular - 打包Angular 2 Electron App时,路线不再起作用

    windows - 检测任务栏按钮的大小

    mysql - 直接从 Electron 应用程序连接到数据库有哪些风险?