项目中碰到的一个问题是,electron调用脚本执行启动后台服务的命令,但是会存在环境问题,在不同的电脑上有不同的表现,经过和后端商量,后端提供一个兼容版本的exe程序,打包的时候将后台程序打包进项目目录,运行这个后台程序后,后台程序会检查后台服务是否开启,如果没有开启会自己开启,然后再打开项目目录下的主运行程序。思路没有问题,但是用electron-builder打包的时候会默认创建快捷方式,所以需要先取消默认的行为,然后通过nsis script 在安装的时候插入执行创建快捷方式的脚本命令,下面是具体的步骤。

取消默认行为

vue.config.js中取消设置快捷方式的行为,关于如何创建自定义脚本,可查阅之前写的一篇自定义安装卸载的文章

electronBuilder: {
      preload: `${path.resolve(__dirname, 'src/preload.js')}`,
      builderOptions: {
        appId: "com.electron.beidou",
        productName: "bd3-command-system",
        extraResources: ["./extraResources/**"],
        win: {
          icon: "public/icon.ico",
          artifactName: "bd3-command-system-${version}.${ext}",
          executableName: 'bd3-command-system',
        },
        nsis: {
          oneClick: false,
          allowToChangeInstallationDirectory: true,
          include: path.resolve(__dirname, 'src/custom.nsh'),
          createDesktopShortcut: false, //取消创建桌面快捷方式
          createStartMenuShortcut: false //取消在开始菜单创建快捷方式
        },
      }
    },

配置nsh脚本

先将脚本复制到项目目录,再创建快捷方式,需要注意的是,卸载的时候也要自己去删除快捷方式

!macro customInstall
  CopyFiles $INSTDIR\\resources\\extraResources\\server\\system\\resources\\bd3-command-system-compatible.exe $INSTDIR
  CreateShortcut "$DESKTOP\\快捷方式.lnk" "$INSTDIR\\bd3-command-system-compatible.exe"
!macroend

!macro customRemoveFiles
        ${ifNot} ${isUpdated}
          # 提示窗
          MessageBox MB_OKCANCEL "是否删除用户数据?" IDOK label_ok  IDCANCEL  label_cancel
          label_ok:
              # 删除已经下载的更新包  
              RMDir /r $PROFILE\\AppData\\Local\\bd3-command-system-updater\\*.*
              # 删除安装目录
              RMDir /r $INSTDIR\\*.*
							# 删除快捷方式
							Delete "$DESKTOP\\xx快捷方式.lnk"
              Goto end
          label_cancel: 
							# 这里自己自定义自己点击取消行为的时候要做什么操作
              Delete "$DESKTOP\\xx快捷方式.lnk"
              Goto end
          end:
        ${endIf}
!macroend