Windows 打包方式与 exe 图标说明本文说明本仓库NSIS 安装包的构建方式以及主程序 exe 图标与安装向导图标分别如何生效便于发版与排障。1. 为何使用独立 YAML 配置发版命令通过--config指向专用文件不会自动合并package.json里的build字段electron-builder 行为。因此electron-builder.nsis.x64.yml、electron-builder.nsis.ia32.yml内需写明appId、productName、files、extraFiles、win、nsis等与安装介质相关的配置避免回落到com.electron.*等默认值。2. 常用命令与产物目录场景命令输出目录安装包命名示例x64 NSISnpm run dist:installdist_install/DataNotifyClient-Setup-${version}.exeia32 NSISnpm run dist:install:32dist_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.exe4.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 修改图标替换或更新src/assets/login/brain-icon.ico建议多尺寸.ico。若改名或换路径需同步修改build/after-pack-win-icon.js中的iconRelYAML 与package.json中的win.icon、nsis.*Icon见下。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.installerIconnsis.uninstallerIconnsis.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.ymlx64 NSIS 完整构建配置electron-builder.nsis.ia32.ymlia32 NSIS 完整构建配置build/after-pack-win-icon.js主 exe 嵌入图标rceditbuild/installer.nshNSIS 脚本片段package.json→scripts/build命令入口与非 YAML 构建时的buildsrc/assets/login/brain-icon.ico主程序 / 安装向导共用图标源