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 主程序 / 安装向导共用图标源
相关推荐
孙凯亮20 分钟前
Electron 接口请求全解析:从疑问到落地(真实开发对话整理)
前端·electron
闲坐含香咀翠20 分钟前
Electron 桌面端多语言优化实战:从静态全量加载到懒加载与用户自定义
前端·electron·客户端
无巧不成书021831 分钟前
Windows环境变量故障排查:记事本BOM头导致配置失效终极解决方案 | 零基础全流程指南
windows·批处理脚本故障·windows故障排查·windows记事本·bom头·utf-8 bom·环境变量读取失效 环境变量配置
FuckPatience1 小时前
Visual Studio的配置管理器
windows·visual studio
REDcker1 小时前
跨平台编译详解 工具链配置与工程化实践
linux·c++·windows·macos·c·跨平台·编译
私人珍藏库2 小时前
[吾爱大神原创工具] 桌面挂件-世界时钟+待办提醒 v1.0 专为出海贸易而设计
windows·工具·软件·win·多功能
承渊政道2 小时前
群晖配Plex搭建私人影音中心,用起来到底怎么样?
服务器·windows·网络协议·https·ip·视频·持续部署
of Watermelon League2 小时前
Redis 下载与安装 教程 windows版
数据库·windows·redis
coNh OOSI2 小时前
如何在 Windows 上安装 MySQL(保姆级教程2024版)
数据库·windows·mysql
梦想的旅途22 小时前
基于 RPA 技术的 IM 办公自动化:深度解析模拟人工交互的 API 实现逻辑
windows·microsoft·自动化·企业微信