使用shell.openItem()在asar存档中打开文件

时间:2017-07-06 15:13:03

标签: node.js electron

我有一个使用app.asar文件的电子应用。我希望能够打开默认Windows应用程序(即Excel)中的asar文件中的文件(.xlsx)。我试过了

let xlsx = path.join(__dirname + '/path/to/app.asar/path/to/file');
shell.openItem(xlsx);

但它不起作用(没有错误,文件没有打开)。

我可以用fs

读取文件
let xlsx = path.join(__dirname + '/path/to/app.asar/path/to/file');
fs.readFileSync(xlsx);

但我无法在Excel中打开该文件。

1 个答案:

答案 0 :(得分:0)

来自Application Packaging

的文档
  

asar存档是一种简单的类似tar的格式,可将文件连接到一个文件中。 Electron可以从中读取任意文件而无需解压缩整个文件。

只有Electron可以访问这些文件,Excel和其他应用程序根本无法处理asar档案。

您可以将文件从asar存档复制到系统的临时文件夹,然后从那里打开它。像这样:

const fs = require('fs')
const path = require('path')
const {shell, app} = require('electron')

let xlsx = path.join(__dirname,'/path/to/app.asar/path/to/file')
let xlsxtmp = üath.join(app.getPath('temp', 'file')
let ws = fs.createWriteStream(xlsxtmp)

fs.createReadStream(xlsx).pipe(ws)

ws.on('finish', () => {
    shell.openItem(xlsxtmp);
}

另一种选择是不将xlsx打包到存档中,而是将其下载到userData路径中。