Javascript Electron-解压缩时包无效

Javascript Electron-解压缩时包无效,javascript,node.js,electron,Javascript,Node.js,Electron,大约3周来,我一直在开发一款电子应用程序,最后决定着手添加更新检查。在我的研究中,在Electron中实现这一点的标准方法(使用Squirrel)要求用户将应用程序实际安装到他们的计算机上。我宁愿不这样做,并且尽可能让所有东西都便于携带。然后,我决定让程序下载update.zip并将其解压缩以覆盖现有文件,从而尝试创建自己的更新脚本。这很有效,直到最后。在提取的最后,我收到一个Invalid package错误,实际的app.asar文件丢失,使应用程序无法使用 我正在使用此功能下载和提取更新:

大约3周来,我一直在开发一款电子应用程序,最后决定着手添加更新检查。在我的研究中,在Electron中实现这一点的标准方法(使用Squirrel)要求用户将应用程序实际安装到他们的计算机上。我宁愿不这样做,并且尽可能让所有东西都便于携带。然后,我决定让程序下载update.zip并将其解压缩以覆盖现有文件,从而尝试创建自己的更新脚本。这很有效,直到最后。在提取的最后,我收到一个
Invalid package
错误,实际的
app.asar
文件丢失,使应用程序无法使用

我正在使用此功能下载和提取更新:

函数下载文件(url、目标、文件名、cb){//下载
var req=请求({
方法:“GET”,
uri:url
});
var out=fs.createWriteStream(目标+'/'+文件名);
所需管道(输出);
请求on('end',function(){
解压(target+'/'+文件名、目标、函数(){
如果(cb){
cb();
}
});
});
}
函数解压(文件、目标、cb){//Unzips
var out=fs.createReadStream(文件);
out.pipe(unzippers.Extract({path:target})).on('finish',function(){
dialog.showMessageBox({
键入:“问题”,
消息:“已完成提取到“%target+””
});
如果(cb){
cb();
}
});
}
并称之为:

下载文件('http://example.com/update.zip,path.join(uu dirname,./'),'update.zip',function(){//http://example.com/update.zip 这不是真正的来源
应用程序重新启动();
app.quit();
});
我使用
unzippers
NPM包()

该代码适用于所有其他zip,但在尝试提取包含Electron应用程序的zip时失败

我做错了什么,或者可能是一个不同的包,正确地支持用.asar文件提取拉链

编辑1
我刚刚发现,它不会抛出相同的JavaScript错误,但是它仍然不能正确提取.asar文件,并且会抛出它自己的错误。由于.asar仍然丢失,在“更新”之后,由于您指向
electron basic updater
的链接,该应用程序仍然无效,因此我发现此处提到的问题:

他们提到了electron应用程序中的问题:

最后,在第二个主题的末尾有一个解决方案:

这是由于electron fs模块将asar文件视为目录而不是文件。要使解压过程正常工作,您需要执行以下两项操作之一:

  • 设置process.noAsar=true
  • 使用原始fs而不是fs
我见过那些与原版fs合作的人。但这对我来说是个大麻烦


所以我试着设置
process.noAsar=true
(然后在解压后设置
process.noAsar=false
),效果很好。

。据我所知,asar没有压缩。我知道它没有压缩。我不是试图解压asar,而是试图解压一个.zip文件,其中包含一个.asar文件(zip中的asar)。当这种情况发生时,Electron将无法提取它。
fs.promises.stat(path.asar)
也会导致问题。我是在
index.js
中设置
process.noAsar
,还是在哪里设置?