You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron Builder自定义NSIS安装卸载脚本问题及错误求助

解决Electron NSIS自定义安装/卸载的问题

一、Python自动安装失败(文件找不到+缺失检查逻辑)

1. 修复文件找不到错误

你的{$SOURCEPATH}变量未正确指向Python安装包路径,或文件路径写法有误,按以下步骤修正:

  • 确认python-3.11.0.exe存放位置,比如放在项目根目录的resources文件夹下。
  • 修改NSIS宏的File命令,使用相对路径或正确变量:
    !macro customInstall
      ; 引入Python安装包到临时目录
      File "resources\python-3.11.0.exe"
      ; 执行静默安装
      ExecWait '$PLUGINSDIR\python-3.11.0.exe /quiet InstallAllUsers=1 PrependPath=1'
      ; 安装完成后清理临时文件
      Delete '$PLUGINSDIR\python-3.11.0.exe'
    !macroend
    
  • 若用electron-builder,需在package.json的build配置中添加资源声明,确保打包时包含安装包:
    "build": {
      "nsis": {
        // 你的NSIS其他配置
      },
      "extraResources": [
        {
          "from": "resources/python-3.11.0.exe",
          "to": "python-3.11.0.exe"
        }
      ]
    }
    
    此时NSIS宏可改为File "${extraResourcesDir}\python-3.11.0.exe"引用安装包。

2. 添加Python已安装检查逻辑

在执行安装前,先检查系统是否已安装Python:

!macro customInstall
  ; 检查Python是否存在
  ClearErrors
  ExecWait 'python -V' $0
  ; 返回值不为0则执行安装流程
  IfErrors 0 +4
    File "resources\python-3.11.0.exe"
    ExecWait '$PLUGINSDIR\python-3.11.0.exe /quiet InstallAllUsers=1 PrependPath=1'
    Delete '$PLUGINSDIR\python-3.11.0.exe'
!macroend

二、卸载阶段问题修复

1. 无法删除C:\Windows\BSD文件夹

del命令仅能删除文件,删除文件夹需使用RMDir命令,搭配/r(递归子目录)和/s(删除文件)参数:

!macro customUnInstall
  ; 删除计划任务
  ExecWait "schtasks /Delete /TN BSD-TASK /F"
  ; 递归删除整个目标文件夹
  RMDir /r /s "C:\Windows\BSD"
!macroend

2. 确保schtasks以管理员权限执行

在NSIS脚本开头添加权限声明,保证卸载程序以管理员身份运行:

RequestExecutionLevel admin

此配置会让卸载流程自动获取管理员权限,确保schtasks命令顺利执行。

完整修正后的NSIS宏示例

RequestExecutionLevel admin

!macro preInit
 SetRegView 64
  WriteRegExpandStr HKLM "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\Windows\BSD"
  WriteRegExpandStr HKCU "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\Windows\BSD"
 SetRegView 32
  WriteRegExpandStr HKLM "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\Windows\BSD"
  WriteRegExpandStr HKCU "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\Windows\BSD"
!macroend

!macro customInstall
  ; 检查Python是否已安装
  ClearErrors
  ExecWait 'python -V' $0
  IfErrors 0 +4
    File "resources\python-3.11.0.exe"
    ExecWait '$PLUGINSDIR\python-3.11.0.exe /quiet InstallAllUsers=1 PrependPath=1'
    Delete '$PLUGINSDIR\python-3.11.0.exe'
!macroend

!macro customUnInstall
  ExecWait "schtasks /Delete /TN BSD-TASK /F"
  RMDir /r /s "C:\Windows\BSD"
!macroend

内容的提问来源于stack exchange,提问作者OnTheRoad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:25:41