【发布时间】:2022-01-16 00:47:37
【问题描述】:
我正在尝试为电子应用创建 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 issues pages 中遇到了同样的问题,这是 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 方法的潜在修复?
【问题讨论】:
标签: node.js electron electron-packager squirrel.windows