Electron-build打包进阶:深度优化NSIS卸载脚本实战指南
当你用electron-build打包的应用程序需要彻底清理用户数据时,是否发现deleteAppDataOnUninstall配置项有时会失效?这并非个例——许多开发者都遇到过Electron默认卸载流程无法满足复杂清理需求的困境。本文将带你深入NSIS脚本层,构建一个真正可控的卸载系统。
1. 为什么默认卸载行为总让人失望
Electron-build默认生成的NSIS卸载脚本存在几个关键缺陷:
- 清理范围有限:仅删除
%APPDATA%下的应用数据目录,对用户手动指定的外部存储位置(如文档、下载目录)无能为力 - 缺乏用户交互:无法在卸载过程中让用户选择保留或删除特定数据
- 路径解析问题:在多用户安装场景下可能错误识别系统路径
典型症状就像这位开发者遇到的:
text复制Documents/
└── database/
├── user_data.db
└── config.json
即使配置了deleteAppDataOnUninstall: true,卸载后重新安装仍能读取到之前的数据库文件。这是因为Electron默认只清理以下目录:
- 安装目录(如
C:\Program Files\YourApp) - 应用数据目录(如
C:\Users\Username\AppData\Roaming\YourApp)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. NSIS脚本改造核心思路
要实现精细化卸载控制,需要理解electron-build的NSIS脚本工作机制:
- 执行阶段:卸载过程分为页面展示(
un.nsDialogsPage)和实际操作(customUnInstall) - 变量传递:通过
Checkbox_State等全局变量在不同阶段间共享用户选择 - 路径处理:使用
SetShellVarContext确保获取正确的用户目录
优化后的流程对比:
| 步骤 | 原始流程 | 优化后流程 |
|---|---|---|
| 1 | 直接开始卸载 | 显示自定义卸载页面 |
| 2 | 删除默认目录 | 记录用户选择 |
