Estoy trabajando en una aplicación de electrones y estoy usando la siguiente implementación de clase para guardar y recuperar datos del disco del usuario. A veces esto funciona correctamente, sin embargo, en ocasiones el programa fallará y generará este error.
aplicación salió con el código 3221225477
No estoy muy seguro de qué está causando este problema. Entiendo que este código de error significa que se está produciendo una infracción de acceso, pero no estoy seguro de por qué. Potencialmente podría ser la implementación de la clase. Simplemente tomé la implementación de aquí https://medium.com/cameron-nokes/how-to-store-user-data-in-electron-3ba6bf66bc1e
También hay ocasiones en las que esto ocurre de forma aleatoria, por lo que puede que no sea la implementación de la Tienda.
const electron = require('electron'); const path = require('path'); const fs = require('fs'); class Store { constructor(opts) { // Renderer process has to get `app` module via `remote`, whereas the main process can get it directly // app.getPath('userData') will return a string of the user's app data directory path. const userDataPath = (electron.app || electron.remote.app).getPath('userData'); // We'll use the `configName` property to set the file name and path.join to bring it all together as a string this.path = path.join(userDataPath, opts.configName + '.json'); this.data = parseDataFile(this.path, opts.defaults); } // This will just return the property on the `data` object get(key) { const val = this.data[key]; console.log('Get', key, val); return val; } // ...and this will set it set(key, val) { console.log('Set', key, val) this.data[key] = val; // Wait, I thought using the node.js' synchronous APIs was bad form? // We're not writing a server so there's not nearly the same IO demand on the process // Also if we used an async API and our app was quit before the asynchronous write had a chance to complete, // we might lose that data. Note that in a real app, we would try/catch this. fs.writeFileSync(this.path, JSON.stringify(this.data)); } } function parseDataFile(filePath, defaults) { // We'll try/catch it in case the file doesn't exist yet, which will be the case on the first application run. // `fs.readFileSync` will return a JSON string which we then parse into a Javascript object try { return JSON.parse(fs.readFileSync(filePath)); } catch(error) { // if there was some kind of error, return the passed in defaults instead. return defaults; } } // expose the class module.exports = Store;Parece que he descubierto la razón de este problema. La siguiente publicación contiene un comentario que dice
Mantenga una referencia global del objeto de la ventana, si no lo hace, la ventana se cerrará automáticamente cuando el objeto de JavaScript se recopile como basura.
https://stackoverflow.com/a/59796326/7259551
Simplemente hacer que la instancia de BrowserWindow sea un valor global solucionó este problema.