6

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

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

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 会产生一个对话框,上面写着: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 问题页面中遇到了同样的问题,这是 electron-winstaller 用来创建安装程序的。不幸的是,在那里找到的唯一答案是“我认为你现在不能在安装如此大的情况下使用 Squirrel”。

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

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

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

4

1 回答 1

0

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

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

附带说明一下,Windows(32 位和 64 位)不适用于大于 4GB 的可执行文件。

于 2021-12-21T02:58:56.597 回答