Electron electron-winstaller无法为大型(文件大小)应用程序创建安装程序。

9
我将尝试为一个Electron应用创建Windows安装程序。
首先,使用electron-packager打包应用程序。
exec(`npx electron-packager ./ "My App Name" --platform=win32 --out=${packagedLocation}`);

然后使用electron-winstaller创建应用程序的安装程序。

try {
    await electronInstaller.createWindowsInstaller({
        appDirectory: packagedLocation,
        outputDirectory: installerLocation,
        authors: 'Author',
        exe: 'myapp.exe'
    });
} catch (e) {
    console.log(`Failure: ${e.message}`);
}

当运行创建安装程序的代码时,exe和msi安装程序都没有正确创建。创建的Setup.exe只有大约200 KB。尝试运行exe会产生一个对话框,上面写着:“这是一个虚拟的update.exe。如果你看到这个,说明你的构建没有正确地替换IDR_UPDATE_ZIP资源。命令行:'--install .'。Squirrel或构建脚本的日志中没有给出任何错误。
通过测试,我发现如果我的打包应用程序的大小太大,就会出现这种情况。我的应用程序包括约3 GB的资源。我需要将这些资源作为安装程序的一部分包含在内,而不是按需下载,因为该应用程序旨在能够在没有互联网访问的情况下工作。这些资源的大小已经被优化,我不能从我的应用程序中删除任何资源。
为了测试目的,如果我随机删除其中一些资源,直到我的打包应用程序的大小小于1 GB,electron-winstaller将正确创建安装程序,没有问题。似乎没有任何特定的资源导致错误。
有没有办法可以以不阻止创建安装程序的方式将这些资源包含在我的应用程序中?
经过进一步调查,我发现一个用户在Squirrel.Windows的Github issues pages上遇到了同样的问题,这是electron-winstaller用于创建安装程序的工具。不幸的是,在那里找到的唯一答案是“我认为您现在无法使用Squirrel来处理如此大的安装文件”。与问题页面上的用户一样,我处于类似的情况,希望有一个单独的安装文件来简化用户的流程。我也不想让应用程序在安装后从互联网上获取资源,因为有可能应用程序在服务器离线很久之后才被安装。我已尝试使用electron-wix-msi来创建安装程序,但结果也没有成功。如果我的应用程序资源超过约1 GB,我在创建安装程序时会收到错误消息light.exe:error LGHT0001:灾难性故障(HRESULT异常:0x8000FFFF(E_UNEXPECTED))

electron-packager 列出了四个可以用于从打包的 Electron 应用创建 Windows 安装程序的软件包。我不能使用 electron-winstaller 和 electron-installer-windows,因为两者都使用 Squirrel,electron-wix-msi 也似乎无法处理大文件,而 electron-windows-store 创建的是 .appx 安装程序,不适用于兼容性问题。 是否有其他方法可用于创建 Electron 应用的 Windows 安装程序?或者是否有可能修复 Squirrel 或 WiX 方法的问题?

1个回答

1
据我所知,Windows Installer安装程序(.msi文件)将它们的资源存储在单个CAB文件中,该文件不能超过64,000(或65,535?)个文件或2GB总文件大小
如果您需要更多,您可能应该将资源打包到更多的CAB文件中,并将所有内容捆绑在一个zip文件中(它没有大小限制)。
另外需要注意的是,Windows(32位和64位)无法使用大于4GB的可执行文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接