Windows 打包方式与 exe 图标说明
本文说明本仓库 NSIS 安装包 的构建方式,以及 主程序 exe 图标 与 安装向导图标 分别如何生效,便于发版与排障。
1. 为何使用独立 YAML 配置
发版命令通过 --config 指向专用文件,不会自动合并 package.json 里的 build 字段(electron-builder 行为)。因此:
electron-builder.nsis.x64.yml、electron-builder.nsis.ia32.yml内需写明appId、productName、files、extraFiles、win、nsis等与安装介质相关的配置,避免回落到com.electron.*等默认值。
2. 常用命令与产物目录
| 场景 | 命令 | 输出目录 | 安装包命名(示例) |
|---|---|---|---|
| x64 NSIS | npm run dist:install |
dist_install/ |
DataNotifyClient-Setup-${version}.exe |
| ia32 NSIS | npm run dist:install:32 |
dist_install_32/ |
DataNotifyClient-Setup-${version}-ia32.exe |
| 两套连续 | npm run dist:all |
上两者皆有 | 同上 |
predist:install / predist:install:32 会在对应 dist:install* 前自动执行:清理输出目录并对 better-sqlite3 做 @electron/rebuild(与目标架构一致)。
3. 与 package.json 中 build 的关系
- 走
dist:install/dist:install:32:以 YAML 为准。 - 直接
npm run dist/electron-builder --win:使用package.json的build;其中已配置afterPack(见下),与 YAML 行为对齐。
若修改 appId、productName、图标路径等,请 YAML 与 package.json 同步,避免两套命令行为不一致。
4. 主程序 exe 图标(安装后启动的 DataNotifyClient.exe)
4.1 问题背景
将 win.signAndEditExecutable 设为 true 时,electron-builder 会使用缓存目录下的 winCodeSign 包内的 rcedit-x64.exe 写入版本信息与图标。在内网或缓存不完整时,常见错误为:缓存中不存在 rcedit-x64.exe,导致打包失败。
4.2 本仓库做法
win.signAndEditExecutable: false:不再依赖上述 winCodeSign 里的 rcedit 去改主 exe。afterPack: build/after-pack-win-icon.js:在打包目录生成后、进入 NSIS 之前,使用 npm 依赖rcedit(自带node_modules/rcedit/bin/rcedit-x64.exe)对${productFilename}.exe执行图标写入。- 图标文件路径(与
win.icon一致):src/assets/login/brain-icon.ico。
安装程序会把 win-unpacked 中的文件拷到安装目录,因此 安装完成后用户启动的 exe 即带嵌入图标(快捷方式、资源管理器中展示依赖该嵌入资源;任务栏图标还受 Electron 窗口/托盘配置影响)。
4.3 修改图标
- 替换或更新
src/assets/login/brain-icon.ico(建议多尺寸.ico)。 - 若改名或换路径,需同步修改:
build/after-pack-win-icon.js中的iconRel- YAML 与
package.json中的win.icon、nsis.*Icon(见下)。
4.4 排障
- 打包日志中出现
[after-pack-win-icon]警告:检查exe/ico路径是否存在。 - 杀软拦截
node_modules/rcedit/bin/rcedit-x64.exe:加入排除或换机打包。 - CI 勿省略
devDependencies,否则无rcedit包。
5. 安装包(Setup.exe)与卸载程序的图标
这与主 exe 不是同一条链路 :由 NSIS 配置 指定,electron-builder 在生成安装向导时使用:
nsis.installerIconnsis.uninstallerIconnsis.installerHeaderIcon
当前 YAML 中均指向 src/assets/login/brain-icon.ico 。修改安装向导外观时改此处即可,无需 改 after-pack-win-icon.js。
6. 其他相关配置(摘要)
asar: false:避免 Windows 上对部分 exe 写 integrity 时的 EBUSY(杀软/索引占用);与发版说明一致。extraFiles:将notify-client.config.example.json以notify-client.config.json名打入包内,供安装目录下与主 exe 同级的运行时配置读取。- NSIS 自定义 :
build/installer.nsh(如customCheckAppRunning)。 - electron-builder / Node :版本以
package.json为准;若@electron/rebuild提示 Node 引擎不满足,可升级 Node 或按团队策略处理。
7. 相关文件索引
| 文件 | 作用 |
|---|---|
electron-builder.nsis.x64.yml |
x64 NSIS 完整构建配置 |
electron-builder.nsis.ia32.yml |
ia32 NSIS 完整构建配置 |
build/after-pack-win-icon.js |
主 exe 嵌入图标(rcedit) |
build/installer.nsh |
NSIS 脚本片段 |
package.json → scripts / build |
命令入口与非 YAML 构建时的 build |
src/assets/login/brain-icon.ico |
主程序 / 安装向导共用图标源 |