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 语句”

Electron——Electron的安装和简单使用

Electron——Electron的安装和简单使用

Electron 使用Widevine CDM插件

使用electron-builder打包时下载electron失败解决方案