mirror of
https://gitee.com/myxzgzs/boyue_jnpf.git
synced 2025-08-12 17:22:42 +08:00
246 lines
4.9 KiB
NSIS
246 lines
4.9 KiB
NSIS
![]() |
Function un.checkAppRunning
|
||
|
!insertmacro CHECK_APP_RUNNING
|
||
|
FunctionEnd
|
||
|
|
||
|
Function un.onInit
|
||
|
SetOutPath $INSTDIR
|
||
|
${LogSet} on
|
||
|
|
||
|
!insertmacro check64BitAndSetRegView
|
||
|
|
||
|
${If} ${Silent}
|
||
|
call un.checkAppRunning
|
||
|
${else}
|
||
|
!ifdef ONE_CLICK
|
||
|
MessageBox MB_OKCANCEL "$(areYouSureToUninstall)" IDOK +2
|
||
|
Quit
|
||
|
|
||
|
# one-click installer executes uninstall section in the silent mode, but we must show message dialog if silent mode was not explicitly set by user (using /S flag)
|
||
|
call un.checkAppRunning
|
||
|
SetSilent silent
|
||
|
!endif
|
||
|
${endIf}
|
||
|
|
||
|
!insertmacro initMultiUser
|
||
|
|
||
|
!ifmacrodef customUnInit
|
||
|
!insertmacro customUnInit
|
||
|
!endif
|
||
|
FunctionEnd
|
||
|
|
||
|
Function un.atomicRMDir
|
||
|
Exch $R0
|
||
|
Push $R1
|
||
|
Push $R2
|
||
|
Push $R3
|
||
|
|
||
|
StrCpy $R3 "$INSTDIR$R0\*.*"
|
||
|
FindFirst $R1 $R2 $R3
|
||
|
|
||
|
loop:
|
||
|
StrCmp $R2 "" break
|
||
|
|
||
|
StrCmp $R2 "." continue
|
||
|
StrCmp $R2 ".." continue
|
||
|
|
||
|
IfFileExists "$INSTDIR$R0\$R2\*.*" isDir isNotDir
|
||
|
|
||
|
isDir:
|
||
|
CreateDirectory "$PLUGINSDIR\old-install$R0\$R2"
|
||
|
|
||
|
Push "$R0\$R2"
|
||
|
Call un.atomicRMDir
|
||
|
Pop $R3
|
||
|
|
||
|
${if} $R3 != 0
|
||
|
Goto done
|
||
|
${endIf}
|
||
|
|
||
|
Goto continue
|
||
|
|
||
|
isNotDir:
|
||
|
ClearErrors
|
||
|
Rename "$INSTDIR$R0\$R2" "$PLUGINSDIR\old-install$R0\$R2"
|
||
|
|
||
|
# Ignore errors when renaming ourselves.
|
||
|
StrCmp "$R0\$R2" "${UNINSTALL_FILENAME}" 0 +2
|
||
|
ClearErrors
|
||
|
|
||
|
IfErrors 0 +3
|
||
|
StrCpy $R3 "$INSTDIR$R0\$R2"
|
||
|
Goto done
|
||
|
|
||
|
continue:
|
||
|
FindNext $R1 $R2
|
||
|
Goto loop
|
||
|
|
||
|
break:
|
||
|
StrCpy $R3 0
|
||
|
|
||
|
done:
|
||
|
FindClose $R1
|
||
|
|
||
|
StrCpy $R0 $R3
|
||
|
|
||
|
Pop $R3
|
||
|
Pop $R2
|
||
|
Pop $R1
|
||
|
Exch $R0
|
||
|
FunctionEnd
|
||
|
|
||
|
Function un.restoreFiles
|
||
|
Exch $R0
|
||
|
Push $R1
|
||
|
Push $R2
|
||
|
Push $R3
|
||
|
|
||
|
StrCpy $R3 "$PLUGINSDIR\old-install$R0\*.*"
|
||
|
FindFirst $R1 $R2 $R3
|
||
|
|
||
|
loop:
|
||
|
StrCmp $R2 "" break
|
||
|
|
||
|
StrCmp $R2 "." continue
|
||
|
StrCmp $R2 ".." continue
|
||
|
|
||
|
IfFileExists "$INSTDIR$R0\$R2\*.*" isDir isNotDir
|
||
|
|
||
|
isDir:
|
||
|
CreateDirectory "$INSTDIR$R0\$R2"
|
||
|
|
||
|
Push "$R0\$R2"
|
||
|
Call un.restoreFiles
|
||
|
Pop $R3
|
||
|
|
||
|
Goto continue
|
||
|
|
||
|
isNotDir:
|
||
|
Rename "$PLUGINSDIR\old-install$R0\$R2" "$INSTDIR$R0\$R2"
|
||
|
|
||
|
continue:
|
||
|
FindNext $R1 $R2
|
||
|
Goto loop
|
||
|
|
||
|
break:
|
||
|
StrCpy $R0 0
|
||
|
FindClose $R1
|
||
|
|
||
|
Pop $R3
|
||
|
Pop $R2
|
||
|
Pop $R1
|
||
|
Exch $R0
|
||
|
FunctionEnd
|
||
|
|
||
|
Section "un.install"
|
||
|
# for assisted installer we check it here to show progress
|
||
|
!ifndef ONE_CLICK
|
||
|
${IfNot} ${Silent}
|
||
|
call un.checkAppRunning
|
||
|
${endIf}
|
||
|
!endif
|
||
|
|
||
|
!insertmacro setLinkVars
|
||
|
|
||
|
!ifmacrodef customUnInstall
|
||
|
!insertmacro customUnInstall
|
||
|
!endif
|
||
|
|
||
|
# delete the installed files
|
||
|
!ifmacrodef customRemoveFiles
|
||
|
!insertmacro customRemoveFiles
|
||
|
!else
|
||
|
${if} ${isUpdated}
|
||
|
CreateDirectory "$PLUGINSDIR\old-install"
|
||
|
|
||
|
Push ""
|
||
|
Call un.atomicRMDir
|
||
|
Pop $R0
|
||
|
|
||
|
${if} $R0 != 0
|
||
|
DetailPrint "File is busy, aborting: $R0"
|
||
|
|
||
|
# Attempt to restore previous directory
|
||
|
Push ""
|
||
|
Call un.restoreFiles
|
||
|
Pop $R0
|
||
|
|
||
|
Abort `Can't rename "$INSTDIR" to "$PLUGINSDIR\old-install".`
|
||
|
${endif}
|
||
|
|
||
|
${endif}
|
||
|
|
||
|
# Remove all files (or remaining shallow directories from the block above)
|
||
|
RMDir /r $INSTDIR
|
||
|
!endif
|
||
|
|
||
|
${ifNot} ${isKeepShortcuts}
|
||
|
WinShell::UninstAppUserModelId "${APP_ID}"
|
||
|
|
||
|
!ifndef DO_NOT_CREATE_DESKTOP_SHORTCUT
|
||
|
WinShell::UninstShortcut "$oldDesktopLink"
|
||
|
Delete "$oldDesktopLink"
|
||
|
!endif
|
||
|
|
||
|
!ifndef DO_NOT_CREATE_START_MENU_SHORTCUT
|
||
|
WinShell::UninstShortcut "$oldStartMenuLink"
|
||
|
|
||
|
Delete "$oldStartMenuLink"
|
||
|
ReadRegStr $R1 SHELL_CONTEXT "${INSTALL_REGISTRY_KEY}" MenuDirectory
|
||
|
${ifNot} $R1 == ""
|
||
|
RMDir "$SMPROGRAMS\$R1"
|
||
|
${endIf}
|
||
|
!endif
|
||
|
${endIf}
|
||
|
|
||
|
# refresh the desktop
|
||
|
System::Call 'shell32::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)'
|
||
|
|
||
|
!ifmacrodef unregisterFileAssociations
|
||
|
!insertmacro unregisterFileAssociations
|
||
|
!endif
|
||
|
|
||
|
Var /GLOBAL isDeleteAppData
|
||
|
StrCpy $isDeleteAppData "0"
|
||
|
|
||
|
ClearErrors
|
||
|
${GetParameters} $R0
|
||
|
${GetOptions} $R0 "--delete-app-data" $R1
|
||
|
${if} ${Errors}
|
||
|
!ifdef DELETE_APP_DATA_ON_UNINSTALL
|
||
|
${ifNot} ${isUpdated}
|
||
|
StrCpy $isDeleteAppData "1"
|
||
|
${endif}
|
||
|
!endif
|
||
|
${else}
|
||
|
StrCpy $isDeleteAppData "1"
|
||
|
${endIf}
|
||
|
|
||
|
${if} $isDeleteAppData == "1"
|
||
|
# electron always uses per user app data
|
||
|
${if} $installMode == "all"
|
||
|
SetShellVarContext current
|
||
|
${endif}
|
||
|
RMDir /r "$APPDATA\${APP_FILENAME}"
|
||
|
!ifdef APP_PRODUCT_FILENAME
|
||
|
RMDir /r "$APPDATA\${APP_PRODUCT_FILENAME}"
|
||
|
!endif
|
||
|
# electron use package.json name for cache,indexdb etc.
|
||
|
!ifdef APP_PACKAGE_NAME
|
||
|
RMDir /r "$APPDATA\${APP_PACKAGE_NAME}"
|
||
|
!endif
|
||
|
${if} $installMode == "all"
|
||
|
SetShellVarContext all
|
||
|
${endif}
|
||
|
${endif}
|
||
|
|
||
|
DeleteRegKey SHELL_CONTEXT "${UNINSTALL_REGISTRY_KEY}"
|
||
|
!ifdef UNINSTALL_REGISTRY_KEY_2
|
||
|
DeleteRegKey SHELL_CONTEXT "${UNINSTALL_REGISTRY_KEY_2}"
|
||
|
!endif
|
||
|
DeleteRegKey SHELL_CONTEXT "${INSTALL_REGISTRY_KEY}"
|
||
|
|
||
|
!ifdef ONE_CLICK
|
||
|
!insertmacro quitSuccess
|
||
|
!endif
|
||
|
SectionEnd
|