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;
}
}
...
});
推荐阅读
- arduino - 处理和 Arduino 串行监视器中的 Arduino 值不同
- angular - 使用 Angular 的 ElementRef 设置 ion-textarea 的焦点:“类型 'ElementRef' 上不存在属性 'setFocus'。”
- github - Github Pages 没有加载我的项目
- python - 为什么每次调用 threading.enumerate 时我的 Python 3 线程都不显示?
- powershell - 在同一文件夹中搜索多个 .xml 文件的指定路径
- javascript - 生成的单选按钮选项卡
- selenium - Geckodriver Selenium 自动下载 PDF
- javascript - 尝试在 chartjs 上呈现一些数据时出现问题
- java - SQLEXCEPTION : long 类型的错误值
- java - 在异步调用中更改变量