Electron 使用 electron-builder 创建 MSI 安装程序
Posted
技术标签:
【中文标题】Electron 使用 electron-builder 创建 MSI 安装程序【英文标题】:Electron create MSI installer using electron-builder 【发布时间】:2016-07-23 18:37:58 【问题描述】:我设法使用电子生成器为 Windows 创建了一个 .exe 安装程序,我创建了 2 个 package.json,正如文档中指出的那样:
https://github.com/electron-userland/electron-builder.
我最终得到了一个包含工作 .exe 的文件夹
"dist:win64": "./node_modules/.bin/build --platform win32 --arch x64"
我的主要 package.json 的构建部分是
"build":
"app-bundle-id": "org.test.mytest",
"app-category-type": "public.app-category.graphics-design",
"osx":
"contents": [
"x": 410,
"y": 150,
"type": "link",
"path": "/Applications"
,
"x": 130,
"y": 150,
"type": "file"
]
,
"win":
"title": "My awesome app",
"version": "2.28.999.1",
"noMsi": false,
"authors": "Author"
一切正常,我有 .exe 安装程序,但无法使用 .msi 安装程序将内容放入程序文件目录。
相反,我最终在 C:\Users\UserHome\AppData\Local\electron 文件夹中安装了一个安装程序,如下所示。
有没有办法让一个真正的 .msi 安装程序使用电子生成器将内容放在 Program 文件夹中。唯一有效的项目是 https://github.com/theodo/electron-boilerplate,但它使用的是电子生成器的旧版本。
在电子文档中将noMsi
设置为false,应该可以解决问题...
Should Squirrel.Windows create an MSI installer?
【问题讨论】:
【参考方案1】:您实际上不需要安装 MSI 即可将您的应用安装到 Program Files
。
如果您在 nsis 配置 (oneClick
) 中禁用一键单击,则会提示用户是进行单用户安装(在 AppData
中)还是每台机器(在 Program Files
中)。
如果您不想让他们选择,您可以将 perMachine
设置为 false,这将只允许安装到 Program Files:
"nsis":
"oneClick": false,
"perMachine": false
,
我个人会让他们选择,因为他们仍然可以在没有管理员权限的情况下安装!
在最新版本的electron-builder
中还有一个allowToChangeInstallationDirectory
选项,允许用户选择任何安装位置。
【讨论】:
【参考方案2】:如wiki of latest electron builder release 中所述,您必须在build.win
中使用msi
选项:
"build":
"app-bundle-id": "org.test.mytest",
"app-category-type": "public.app-category.graphics-design",
...
,
"win":
"title": "My awesome app",
"version": "2.28.999.1",
"msi": true,
"authors": "Author"
【讨论】:
我遇到了几个错误:Package "electron" is only allowed in "devDependencies". Please remove it from the "dependencies" section in your package.json.
为什么我不能将电子作为依赖项?这不是破坏了整个目的吗?无论如何,我删除了它并再次尝试yarn dist
,但这次我得到了错误:Invalid configuration object. electron-builder 22.3.2 has been initialised using a configuration object that does not match the API schema.
你好?你能帮帮我吗?
您似乎对 elecron builder 有一些错误的配置。请检查documentation 或scheme 找出问题所在
谢谢。与此同时,我想出了如何去做。但是,我在正确显示桌面快捷方式图标时遇到了一个问题。你介意看看我的question?
@oldboy 哇哇哇!等等……“Electron”是一个开发者工具,用于创建基于 Chromium 引擎和 Node.js 环境的独立于平台的桌面应用程序。它不是生产依赖,而是开发依赖。您的软件在分发过程中不应包含电子本身!因此,在安装“electron”时,请使用以下命令:“npm install electron --save-dev”。否则,整个电子环境 (>150 MB) 将不必要地包含在您的安装程序中!!!这就是错误消息告诉您的内容!【参考方案3】:
如果你想要的只是一个 exe 格式的安装程序(我不知道 msi),你可以使用 electron-builder 来构建解压到目录的 exe。查看http://npmjs.org/package/electron-builder 的文档。文档非常简单。使用 exe 获得解压后的文件夹后,使用“Inno Setup Compiler”创建具有专业外观的安装程序。掌握窍门后,只需 5 分钟即可完成整个操作。
【讨论】:
【参考方案4】:我也(还)没有让这个工作,但我的理解是它是 相反的(可怕的命名)。
"noMsi": false // will make an MSI
"noMsi": true // will NOT make an MSI
【讨论】:
是的,我也明白这一点,但该选项对我不起作用。我在执行的脚本中看到是否有不同的 --no-msi 参数,但最终结果相同,没有 msi 安装程序...【参考方案5】:我通过查看目标发现了这一点。这样做
"win":
"target": [
"msi"
]
//your code here
,
【讨论】:
【参考方案6】:你可以使用“electron-wix-msi”这个包来完成这个任务。 https://www.npmjs.com/package/electron-wix-msi 但首先你需要使用 Electron-packager 或 Electron-Builder 打包你的项目资源,然后将 win-unpacked 文件夹的路径作为 APP-DIR
【讨论】:
从 wix 创建后,msi 未显示在“添加或删除程序”列表中。以上是关于Electron 使用 electron-builder 创建 MSI 安装程序的主要内容,如果未能解决你的问题,请参考以下文章
Electron 使用 electron-builder 创建 MSI 安装程序
Electron 和 TypeScript (electron-builder):“不能在模块外使用 import 语句”