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

No *_*ons 9 node.js electron squirrel.windows electron-packager

我正在尝试为电子应用程序创建 Windows 安装程序。

首先,应用程序使用电子打包器进行打包。

exec(`npx electron-packager ./ "My App Name" --platform=win32 --out=${packagedLocation}`);
Run Code Online (Sandbox Code Playgroud)

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

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

当运行创建安装程序的代码时,exe 和 msi 安装程序都未正确创建。创建的Setup.exe只有大约200 KB。尝试运行 exe 会生成一个对话框,其中显示:This is a dummy update.exe. If you are seeing this, your build did not correctly replace the IDR_UPDATE_ZIP resource. Command Line: '--install .'。Squirrel 或构建脚本的日志中没有给出任何错误。

通过测试,我发现如果我打包的应用程序的大小太大,就会发生这种情况。我的应用程序包含大约 3 GB 的资源。我需要将这些资源作为安装程序的一部分包含在内,而不是根据需要下载,因为该应用程序旨在无需访问互联网即可运行。这些资源的大小已经优化,我无法从我的应用程序中删除任何资源。

出于测试目的,如果我随机删除其中一些资源,直到打包应用程序的大小小于 1 GB,则 Electron-winstaller 将正确创建安装程序,不会出现任何问题。似乎不是任何特定资源导致了该错误。

有什么方法可以在不阻止创建安装程序的情况下将这些资源包含在我的应用程序中?

更新

在做了一些进一步的研究之后,我发现一个用户在Squirrel.Windows 的Github 问题页面中遇到了同样的问题,这是 electro-winstaller 用于创建安装程序的。不幸的是,找到的唯一答案是“我认为您现在无法在如此大的安装中使用 Squirrel”。

就像问题页面上的用户一样,我也处于类似的情况,我想要一个安装文件来简化用户的过程。我也不希望应用程序在安装后从互联网上获取资源,因为应用程序可能会在服务器离线很长时间后安装。

我也尝试使用 electro-wix-msi 创建安装程序,但结果类似,但不成功。light.exe : error LGHT0001 : Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))如果我的应用程序的资源超过 1 GB 左右,我在尝试创建安装程序时会收到错误消息。

Electron-packager列出了四个可用于从打包的 Electron 应用程序创建 Windows 安装程序的包。我无法使用 electro-winstaller 和 electro-installer-windows,因为两者都使用 Squirrel,electron-wix-msi 似乎也无法处理大文件,并且 electro-windows-store 创建的 .appx 安装程序不利于兼容性。我还有其他方法可以为电子应用程序创建 Windows 安装程序吗?或者 Squirrel 或 WiX 方法有任何潜在的修复方法吗?

小智 1

据我了解,Windows Installer 包(.msi 文件)将其资源存储在单个 CAB 文件中,该文件不能超过 64,000 个(或者可能是 65,535 个?)文件或总文件大小 2GB

如果您需要更多,您可能应该将资源打包到更多 CAB 文件中,并将所有内容捆绑在 zip 文件中(没有大小限制)。

附带说明一下,Windows(32 位和 64 位)无法处理大于 4GB 的可执行文件。