Windows 打包方式与 exe图标说明

Windows 打包方式与 exe 图标说明

本文说明本仓库 NSIS 安装包 的构建方式,以及 主程序 exe 图标安装向导图标 分别如何生效,便于发版与排障。

1. 为何使用独立 YAML 配置

发版命令通过 --config 指向专用文件,不会自动合并 package.json 里的 build 字段(electron-builder 行为)。因此:

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.jsonbuild 的关系

  • dist:install / dist:install:32 :以 YAML 为准
  • 直接 npm run dist / electron-builder --win :使用 package.jsonbuild;其中已配置 afterPack(见下),与 YAML 行为对齐。

若修改 appIdproductName、图标路径等,请 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 修改图标

  1. 替换或更新 src/assets/login/brain-icon.ico (建议多尺寸 .ico)。
  2. 若改名或换路径,需同步修改:

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.installerIcon
  • nsis.uninstallerIcon
  • nsis.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.jsonnotify-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.jsonscripts / build 命令入口与非 YAML 构建时的 build
src/assets/login/brain-icon.ico 主程序 / 安装向导共用图标源
相关推荐
为何创造硅基生物7 小时前
嵌入式 LVGL / SquareLine UI 标准命名规则(行业通用版)
windows·ui
十八旬8 小时前
快速安装ClaudeCode完整指南
开发语言·windows·python·claude
谁的小耳朵11 小时前
一次小米电脑管家安装失败排查:官网安装包闪退,最后发现是埋点接口异常
windows
x***r15112 小时前
DLL错误专修工具_TBI3264安装步骤详解(附DLL缺失一键修复与运行库安装教程)
windows
阿萨德528号16 小时前
Windows RabbitMQ 启动完整指南(附启动报错解决、如何以服务方式后台运行)
windows·rabbitmq·ruby
私人珍藏库16 小时前
[吾爱大神原创工具] 鼠标轨迹美化工具
windows·工具·鼠标·软件·win·多功能
小小测试开发16 小时前
AI Agent 重构单体应用实战:1Password 经验与避坑指南
人工智能·windows·重构
您^_^16 小时前
专家(一):Claude Code 微服务实战——6 个服务从拆分到 K8s 部署,$0.45 全套 YAML 照抄
人工智能·windows·微服务·架构·kubernetes·个人开发·claude code
TE-茶叶蛋16 小时前
Java 8 引入的Stream API-stream()
java·windows·python
lei_68617 小时前
Microsoft Office Click-to-Run Service关闭服务
windows·microsoft