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.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 修改图标

  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.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 主程序 / 安装向导共用图标源
相关推荐
打工仔折腾 AI2 小时前
FaceFusion本地换脸实战:Windows整合包、模型选择与遮罩调参记录
人工智能·windows·后端·python·深度学习·性能优化·ai agent 实战
不可能片场2 小时前
AI视频口型对齐 用音频驱动说话镜头
前端·electron
小蜗牛狂飙记4 小时前
Windows 双击 Jar 包无反应,不用写 bat 脚本!Jarfix 一键修复(以 Struts2 扫描工具为例)
windows·struts·jar
坐看风云变幻4 小时前
Betaflight 开发环境搭建保姆级教程(Ubuntu / Windows+WSL / Docker 三方案 + 官方网址大全)
windows·ubuntu·docker·无人机·飞控·betaflight
IT技术分享社区5 小时前
在 Windows 上跑未改动的 Linux 程序:微软 LiteBox v0.1 把这件事变简单了
linux·运维·windows·microsoft·开源
kakakahahahaha5 小时前
Win10/Win11 Windows Hello指纹不可用处理:WbioSrvc、传感器驱动与登录策略
windows·电脑·笔记本电脑·内容运营·软件需求
小黄人软件6 小时前
粘贴助手C++版 支持 Windows 7 / 10 / 11 不会出现缺少api-ms-win-core-path-11-1-0.dll
开发语言·c++·windows
Vex2une15 小时前
Windows 性能监视器发展史:从 PerfMon 计数器到 XPerf 深度诊断
windows·wpa·etw·性能监视器·perfmon·性能计数器·xperf
在角落发呆15 小时前
工具配置备份步骤:从手动备份到自动化方案
运维·windows·自动化
Vd7H20A716 小时前
Windows 下用 llama.cpp 运行 Qwen3.8-27B 并开启 512K 上下文 完全指南
windows·llama