You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在electron-builder构建的pkg安装包中嵌入并执行另一pkg安装文件

问题核心原因

你的配置存在两个核心错误,导致pkg文件没有被打包:

  • asarUnpack配置仅作用于已经被打入asar归档的资源,作用是将指定文件从asar里解压到外部,你没有将file.pkg纳入electron-builder的打包资源列表,所以这条配置完全不生效,自然不会被打包到产物中。
  • 你把file.pkg拷贝到项目根目录的操作不会被electron-builder默认识别,默认配置下,只有你显式声明的额外资源、build目录下的静态资源、项目依赖才会被打进应用包。

完整解决步骤

第一步:调整electron-builder配置

修改config.yaml,通过extraResources显式指定要打包的pkg文件,同时配置pkg安装脚本路径:

mac:
  target:
    - pkg
  # 显式声明额外要打包的资源
  extraResources:
    - from: "./file.pkg"
      to: "./" # 打包后会放在应用包的 Contents/Resources 目录下
# pkg安装包专属配置
pkg:
  # 指定存放pkg安装脚本的目录,你需要在项目根目录新建这个文件夹
  scripts: "./install-scripts"
dmg:
  sign: false
  writeUpdateInfo: false

第二步:编写pkg安装执行脚本

在项目根目录新建install-scripts文件夹,在文件夹内创建postinstall文件(注意必须给文件加可执行权限:执行chmod +x postinstall),写入以下内容:

#!/bin/bash
# 内置变量$2是当前pkg安装的目标路径,也就是你的应用最终被安装到的位置
EMBEDDED_PKG_PATH="$2/Contents/Resources/file.pkg"
# 执行嵌入的pkg安装,会自动弹出权限验证提示
installer -pkg "$EMBEDDED_PKG_PATH" -target /
# 你需要的其他安装前/安装后逻辑可以在这里补充

第三步:确认拷贝逻辑执行时机

保证你的build.js中的拷贝代码是在electron-builder打包流程启动前执行的,避免打包时file.pkg还没被拷贝到对应路径。

如果你不需要在安装主应用的过程中自动安装外部工具,而是要在应用运行时按需触发安装,不需要配置pkg的scripts字段,直接在应用代码里通过子进程调用installer -pkg 你的pkg路径 -target /即可。
如果需要同时兼容dmg格式的安装包,可以在应用首次启动时加检测逻辑:判断外部工具是否存在,不存在的话调用系统接口唤起应用包内带的file.pkg安装即可,不需要额外修改dmg配置。

内容的提问来源于stack exchange,提问作者Paddel_Bln

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:45:03