init
This commit is contained in:
245
mc_test/node_modules/app-builder-lib/templates/nsis/uninstaller.nsh
generated
vendored
Executable file
245
mc_test/node_modules/app-builder-lib/templates/nsis/uninstaller.nsh
generated
vendored
Executable file
@ -0,0 +1,245 @@
|
||||
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
|
||||
|
||||
# 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}"
|
||||
|
||||
!ifmacrodef customUnInstall
|
||||
!insertmacro customUnInstall
|
||||
!endif
|
||||
|
||||
!ifdef ONE_CLICK
|
||||
!insertmacro quitSuccess
|
||||
!endif
|
||||
SectionEnd
|
||||
Reference in New Issue
Block a user