[英]Electron-builder (NSIS): do not ask about deleting data on reinstall (cannot distinguish reinstall and uninstall)
我使用 Electron-builder(版本 22.14.13)为我们的应用程序 (Windows) 创建安装程序。
我需要创建自定义安装程序,因此当用户卸载应用程序时,无论他是否想删除应用程序数据,都会出现对话框。
问题在于,万一用户重新安装应用程序(安装现有应用程序)时,不应询问他并且应保存应用程序数据。 根据有类似问题的人的回答( #5633 、 #4141 ),我找到了下一个解决方案。 我使用以下脚本自定义宏:
!macro customInit
#If app is installed over previous version we shouldn't ask whether to delete app data or not
StrCpy $1 "install"
!macroend
!macro customUnInit
SetSilent normal
!macroend
!macro customUnInstall
${if} $1 == "install"
Goto done
${EndIf}
MessageBox MB_YESNO "Delete application data?" \
/SD IDNO IDNO Skipped IDYES Accepted
Accepted:
!ifdef APP_PRODUCT_FILENAME
RMDir /r "$APPDATA\${APP_PRODUCT_FILENAME}"
!endif
Goto done
Skipped:
Goto done
done:
!macroend
所以我们用一个变量来区分app什么时候重装,什么时候卸载。 在我们更新 electron-builder(以前的版本 22.11.7)和 electron(以前的版本是 13.1.6)之前,它一直在工作。 现在的问题是变量在重新安装时不存储值“install”,并且对话框总是出现,在重新安装时也是如此。 任何帮助都会很棒。
该问题已通过文档中提到的标志isUpdated
解决。 ( https://www.electron.build/configuration/nsis.html )
所以更新后的脚本如下所示:
!macro customUnInstall
# when App is updated we want to preserve user data by default
${if} ${isUpdated}
Goto done
${endIf}
MessageBox MB_YESNO "Delete application data?" \
/SD IDNO IDNO Skipped IDYES Accepted
Accepted:
!ifdef APP_PRODUCT_FILENAME
RMDir /r "$APPDATA\${APP_PRODUCT_FILENAME}"
!endif
Goto done
Skipped:
Goto done
done:
!macroend
很简单。 前段时间我尝试使用它,但由于某种原因它无法正常工作。 不行,我们不需要使用变量!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.