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 主程序 / 安装向导共用图标源
相关推荐
007张三丰11 小时前
软件安装包制作工具推荐和比较
pyinstaller·打包·clickonce·安装包制作·inno setup·nsis·installer
玖釉-13 小时前
Vulkan 离屏渲染详解:从 Framebuffer 到后处理、阴影贴图与 Render Texture
c++·windows·计算机视觉·图形渲染
峰上踏雪13 小时前
Windows 下最推荐的 Qt + VS2026 + CMake 开发方案
开发语言·windows·qt
s_nshine13 小时前
释放C盘,迁移studio相关数据到其他盘
android·windows·android studio·内存·c盘
衫水15 小时前
Windows Server Nginx 代理企业内网 API 偶发超时处理与保活 SOP(20260608))
运维·windows·nginx
X_szxj16 小时前
Windows安装liboqs库
windows·github
caimouse16 小时前
Reactos 第 5 章 进程与线程 — 5.1 概述
c语言·windows·架构
玖釉-17 小时前
nvpro_core2 详解:NVIDIA Vulkan / OpenGL 图形样例背后的现代 C++ 基础库
c++·windows·图形渲染
TrisighT17 小时前
Electron 窗口切后台,我的轮询怎么停了?排查一下午才发现是浏览器搞的鬼
electron·harmonyos
程序员佳佳17 小时前
我在 Windows 和低配 Linux 上做 RAG:Milvus、FAISS、向量 API 中转的中立实测
linux·人工智能·windows·gpt·aigc·milvus·faiss