electron-builder自定义NSIS的customInstall、customUnInstall宏不生效
Electron-builder 自定义NSIS宏不生效的修正方法
高频问题原因与对应配置调整
你已经确认installer.nsh文件被正常加载,说明文件路径配置没有问题,宏不执行基本都是以下3类配置遗漏导致的,按出现概率从高到低排列:
- 一键安装模式的会话隔离导致弹窗不可见
electron-builder默认开启oneClick: true一键安装模式,这种模式下安装程序触发UAC提权后,会进入Windows隔离的Session 0上下文运行安装流程,你在宏里写的MessageBox属于隔离会话内的弹窗,用户完全看不到,很容易误以为宏没有执行。
调整方式:在nsis配置块里加上"oneClick": false,切为向导式安装模式,安装流程运行在用户可交互的会话中,弹窗就能正常显示。如果不想切换模式,就把弹窗换成写测试文件的操作来验证宏执行状态,不要直接依赖弹窗判断逻辑有没有跑。 - 权限判断逻辑拦截宏执行
electron-builder v24以上版本的内置NSIS模板里,customInstall宏的调用逻辑被包裹在管理员权限的判断分支中:当安装配置为默认的perMachine: false(按用户安装)模式时,提权触发后的流程不会进入宏的执行块。
调整方式:如果需要在非管理员模式下也能触发自定义宏,或者你的宏逻辑需要管理员权限,就在nsis配置里加上"perMachine": true,强制以管理员权限安装,宏就会正常进入执行分支。 - 编译缓存复用导致脚本未更新
部分场景下electron-builder会复用之前缓存的NSIS编译产物,哪怕你改了installer.nsh的内容,最终打包的安装程序还是用的旧脚本,表现为宏不生效。
调整方式:删除项目下node_modules/.cache目录后重新执行打包命令。
快速验证技巧
不确定宏是否真的执行时,可以在宏块里加一段写本地文件的逻辑,替换掉单纯的弹窗:
!macro customInstall ; 安装完成后在用户桌面生成测试文件 FileOpen $0 "$DESKTOP/macro-verify.txt" w FileWrite $0 "customInstall 已执行" FileClose $0 MessageBox MB_OK "Test output 1" !macroend
安装完成后直接查看桌面有没有生成这个测试文件,就能100%确认宏的执行状态,不会因为弹窗的会话隔离问题误判。
注意:自定义宏里的操作权限要和当前安装上下文匹配,否则会触发安装流程的静默崩溃,也会表现为宏“不生效”。
内容的提问来源于stack exchange,提问作者Alok
相关产品推荐
相关产品推荐

