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 主程序 / 安装向导共用图标源
相关推荐
?re?ta?rd?ed?4 小时前
C++11新特性,{}与左值
c++·windows
不可能片场6 小时前
Electron 发布 cookie 库先查明文再写解密
前端·electron
必须得开心呀7 小时前
windows10系统任务栏图标消失修复
windows
zl_dfq7 小时前
Windows 下 UDP 套接字编程指南
网络·windows·udp
学习论之费曼学习法8 小时前
无人值守AI内容矩阵实战(10):Windows 上让 Python 进程 7×24 活着
人工智能·windows·python·矩阵·powershell·进程守护
少年的范儿9 小时前
Windows 安装 MySQL 8.4 教程(ZIP 解压版):配置 my.ini、初始化数据库与启动服务
数据库·windows·mysql
胖纸不争9 小时前
EnergyStarZ:让 Windows 后台进程给前台让路的能效管理器(v1.2 发布)
windows·性能优化·c#·win32·ef core
2501_9159090611 小时前
Windows 上用 VS Code 调试 iPhone 真机 App,KXBuild 断点、崩溃定位实操
ide·windows·vscode·ios·iphone·个人开发·敏捷流程
情 九11 小时前
MCP 开发环境搭建:Mac 与 Windows 跑通 Python 服务和 stdio 客户端
windows·python·macos·mcp
懂点Tech20 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python