项目中碰到的一个问题是,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 //取消在开始菜单创建快捷方式
},
}
},
先将脚本复制到项目目录,再创建快捷方式,需要注意的是,卸载的时候也要自己去删除快捷方式
!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