我正在使用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/