You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
313 lines
9.7 KiB
313 lines
9.7 KiB
; This file is part of Notepad++ project |
|
; Copyright (C)2021 Don HO <don.h@free.fr> |
|
; |
|
; This program is free software: you can redistribute it and/or modify |
|
; it under the terms of the GNU General Public License as published by |
|
; the Free Software Foundation, either version 3 of the License, or |
|
; at your option any later version. |
|
; |
|
; This program is distributed in the hope that it will be useful, |
|
; but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
; GNU General Public License for more details. |
|
; |
|
; You should have received a copy of the GNU General Public License |
|
; along with this program. If not, see <https://www.gnu.org/licenses/>. |
|
|
|
Var installPath |
|
Var doLocalConf |
|
Var keepUserData |
|
Function un.onInit |
|
StrCpy $keepUserData "false" ; default value(It is must, otherwise few files such as shortcuts.xml, contextMenu.xml etc, will not be removed when $INSTDIR\doLocalConf.xml is not available.) |
|
; determinate theme path for uninstall themes |
|
StrCpy $installPath "$APPDATA\${APPNAME}" |
|
StrCpy $doLocalConf "false" |
|
IfFileExists $INSTDIR\doLocalConf.xml doesExist noneExist |
|
doesExist: |
|
StrCpy $installPath $INSTDIR |
|
StrCpy $doLocalConf "true" |
|
noneExist: |
|
;MessageBox MB_OK "doLocalConf == $doLocalConf" |
|
|
|
Call un.setPathAndOptions |
|
FunctionEnd |
|
|
|
Function un.onUninstSuccess |
|
; make sure all the empty folders are deleted on successful uninstall |
|
; These folders will be deleted only if they are empty |
|
RMDir "$INSTDIR\localization\" |
|
RMDir "$INSTDIR\plugins\APIs\" |
|
RMDir "$INSTDIR\plugins\disabled\" |
|
RMDir "$INSTDIR\plugins\" |
|
RMDir "$INSTDIR\updater\" |
|
RMDir "$INSTDIR\autoCompletion\" |
|
RMDir "$INSTDIR\functionList\" |
|
RMDir "$INSTDIR\themes\" |
|
RMDir "$INSTDIR\contextmenu\" |
|
RMDir "$INSTDIR\" |
|
|
|
RMDir "$APPDATA\${APPNAME}\plugins\" |
|
RMDir "$installPath\themes\" ; if files are kept because of $keepUserData, this will not be deleted |
|
RMDir "$installPath\userDefineLangs\" |
|
RMDir "$installPath\contextmenu\" |
|
RMDir "$installPath\" |
|
FunctionEnd |
|
|
|
|
|
Section un.explorerContextMenu |
|
ExecWait 'regsvr32 /u /s "$INSTDIR\NppShell_01.dll"' |
|
ExecWait 'regsvr32 /u /s "$INSTDIR\NppShell_02.dll"' |
|
ExecWait 'regsvr32 /u /s "$INSTDIR\NppShell_03.dll"' |
|
ExecWait 'regsvr32 /u /s "$INSTDIR\NppShell_04.dll"' |
|
ExecWait 'regsvr32 /u /s "$INSTDIR\NppShell_05.dll"' |
|
ExecWait 'regsvr32 /u /s "$INSTDIR\NppShell_06.dll"' |
|
Delete "$INSTDIR\NppShell_01.dll" |
|
Delete "$INSTDIR\NppShell_02.dll" |
|
Delete "$INSTDIR\NppShell_03.dll" |
|
Delete "$INSTDIR\NppShell_04.dll" |
|
Delete "$INSTDIR\NppShell_05.dll" |
|
Delete "$INSTDIR\NppShell_06.dll" |
|
|
|
ExecWait 'regsvr32 /u /s "$INSTDIR\contextmenu\NppShell.dll"' |
|
SectionEnd |
|
|
|
Section un.UnregisterFileExt |
|
; Remove references to "Notepad++_file" |
|
IntOp $1 0 + 0 ; subkey index |
|
StrCpy $2 "" ; subkey name |
|
Enum_HKCR_Loop: |
|
EnumRegKey $2 HKCR "" $1 |
|
StrCmp $2 "" Enum_HKCR_Done |
|
ReadRegStr $0 HKCR $2 "" ; Read the default value |
|
${If} $0 == "Notepad++_file" |
|
ReadRegStr $3 HKCR $2 "Notepad++_backup" |
|
; Recover (some of) the lost original file types |
|
${If} $3 == "Notepad++_file" |
|
${If} $2 == ".ini" |
|
StrCpy $3 "inifile" |
|
${ElseIf} $2 == ".inf" |
|
StrCpy $3 "inffile" |
|
${ElseIf} $2 == ".nfo" |
|
StrCpy $3 "MSInfoFile" |
|
${ElseIf} $2 == ".txt" |
|
StrCpy $3 "txtfile" |
|
${ElseIf} $2 == ".log" |
|
StrCpy $3 "txtfile" |
|
${ElseIf} $2 == ".xml" |
|
StrCpy $3 "xmlfile" |
|
${EndIf} |
|
${EndIf} |
|
${If} $3 == "Notepad++_file" |
|
; File type recovering has failed. Just discard the current file extension |
|
DeleteRegKey HKCR $2 |
|
${Else} |
|
; Restore the original file type |
|
WriteRegStr HKCR $2 "" $3 |
|
DeleteRegValue HKCR $2 "Notepad++_backup" |
|
IntOp $1 $1 + 1 |
|
${EndIf} |
|
${Else} |
|
IntOp $1 $1 + 1 |
|
${EndIf} |
|
Goto Enum_HKCR_Loop |
|
Enum_HKCR_Done: |
|
|
|
; Remove references to "Notepad++_file" from "Open with..." |
|
IntOp $1 0 + 0 ; subkey index |
|
StrCpy $2 "" ; subkey name |
|
Enum_FileExts_Loop: |
|
EnumRegKey $2 HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts" $1 |
|
StrCmp $2 "" Enum_FileExts_Done |
|
DeleteRegValue HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\$2\OpenWithProgids" "Notepad++_file" |
|
IntOp $1 $1 + 1 |
|
Goto Enum_FileExts_Loop |
|
Enum_FileExts_Done: |
|
|
|
; Remove "Notepad++_file" file type |
|
DeleteRegKey HKCR "Notepad++_file" |
|
SectionEnd |
|
|
|
Section un.UserManual |
|
RMDir /r "$INSTDIR\user.manual" |
|
SectionEnd |
|
|
|
|
|
Function un.doYouReallyWantToKeepData |
|
StrCpy $keepUserData "false" |
|
MessageBox MB_YESNO "Would you like to keep your custom settings?" /SD IDNO IDYES skipRemoveUserData IDNO removeUserData |
|
skipRemoveUserData: |
|
StrCpy $keepUserData "true" |
|
removeUserData: |
|
FunctionEnd |
|
|
|
|
|
!macro uninstallRegKey |
|
;Remove from registry... |
|
!ifdef ARCH64 |
|
SetRegView 32 |
|
!else ifdef ARCHARM64 |
|
SetRegView 32 |
|
!else |
|
SetRegView 64 |
|
!endif |
|
DeleteRegKey HKLM "${UNINSTALL_REG_KEY}" |
|
DeleteRegKey HKLM "SOFTWARE\${APPNAME}" |
|
;DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\notepad++.exe" |
|
!ifdef ARCH64 |
|
SetRegView 64 |
|
!else ifdef ARCHARM64 |
|
SetRegView 64 |
|
!else |
|
SetRegView 32 |
|
!endif |
|
!macroend |
|
|
|
!macro uninstallDir dir2remove |
|
; Delete Shortcuts |
|
Delete "$SMPROGRAMS\Notepad++\Uninstall.lnk" |
|
RMDir "$SMPROGRAMS\Notepad++" |
|
|
|
UserInfo::GetAccountType |
|
Pop $1 |
|
StrCmp $1 "Admin" 0 +2 |
|
SetShellVarContext all |
|
|
|
Delete "$DESKTOP\Notepad++.lnk" |
|
Delete "$SMPROGRAMS\Notepad++.lnk" |
|
Delete "$SMPROGRAMS\Notepad++\Notepad++.lnk" |
|
Delete "$SMPROGRAMS\Notepad++\readme.lnk" |
|
|
|
RMDir /r "${dir2remove}" |
|
!macroend |
|
|
|
|
|
Section Uninstall |
|
!ifdef ARCH64 |
|
SetRegView 64 |
|
!else ifdef ARCHARM64 |
|
SetRegView 64 |
|
!else |
|
SetRegView 32 |
|
!endif |
|
;Remove from registry... |
|
DeleteRegKey HKLM "${UNINSTALL_REG_KEY}" |
|
DeleteRegKey HKLM "SOFTWARE\${APPNAME}" |
|
DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\notepad++.exe" |
|
|
|
; Delete self |
|
Delete "$INSTDIR\uninstall.exe" |
|
|
|
; Delete Shortcuts |
|
Delete "$SMPROGRAMS\${APPNAME}\Uninstall.lnk" |
|
RMDir "$SMPROGRAMS\${APPNAME}" |
|
|
|
UserInfo::GetAccountType |
|
Pop $1 |
|
StrCmp $1 "Admin" 0 +2 |
|
SetShellVarContext all ; make context for all user |
|
|
|
Delete "$DESKTOP\Notepad++.lnk" |
|
Delete "$SMPROGRAMS\Notepad++.lnk" |
|
Delete "$SMPROGRAMS\${APPNAME}\Notepad++.lnk" |
|
Delete "$SMPROGRAMS\${APPNAME}\readme.lnk" |
|
|
|
|
|
; Clean up Notepad++ |
|
Delete "$INSTDIR\SciLexer.dll" |
|
Delete "$INSTDIR\change.log" |
|
Delete "$INSTDIR\LICENSE" |
|
|
|
Delete "$INSTDIR\notepad++.exe" |
|
Delete "$INSTDIR\readme.txt" |
|
|
|
${If} $doLocalConf == "true" |
|
Call un.doYouReallyWantToKeepData |
|
${endIf} |
|
|
|
${If} $keepUserData == "false" |
|
Delete "$INSTDIR\config.xml" |
|
Delete "$INSTDIR\langs.xml" |
|
Delete "$INSTDIR\stylers.xml" |
|
Delete "$INSTDIR\contextMenu.xml" |
|
Delete "$INSTDIR\tabContextMenu.xml" |
|
Delete "$INSTDIR\shortcuts.xml" |
|
Delete "$INSTDIR\functionList.xml" |
|
Delete "$INSTDIR\session.xml" |
|
Delete "$INSTDIR\nativeLang.xml" |
|
Delete "$INSTDIR\userDefineLang.xml" |
|
Delete "$INSTDIR\nppLogNulContentCorruptionIssue.xml" |
|
Delete "$INSTDIR\toolbarIcons.xml" |
|
${endIf} |
|
|
|
Delete "$INSTDIR\config.model.xml" |
|
Delete "$INSTDIR\langs.model.xml" |
|
Delete "$INSTDIR\stylers.model.xml" |
|
Delete "$INSTDIR\tabContextMenu_example.xml" |
|
Delete "$INSTDIR\stylers_remove.xml" |
|
Delete "$INSTDIR\localization\english.xml" |
|
Delete "$INSTDIR\LINEDRAW.TTF" |
|
Delete "$INSTDIR\SourceCodePro-Regular.ttf" |
|
Delete "$INSTDIR\SourceCodePro-Bold.ttf" |
|
Delete "$INSTDIR\SourceCodePro-It.ttf" |
|
Delete "$INSTDIR\SourceCodePro-BoldIt.ttf" |
|
Delete "$INSTDIR\NppHelp.chm" |
|
Delete "$INSTDIR\userDefinedLang-markdown.default.modern.xml" |
|
Delete "$INSTDIR\userDefineLangs\userDefinedLang-markdown.default.modern.xml" |
|
Delete "$INSTDIR\userDefineLangs\markdown._preinstalled.udl.xml" |
|
Delete "$INSTDIR\userDefineLangs\markdown._preinstalled_DM.udl.xml" |
|
Delete "$INSTDIR\doLocalConf.xml" |
|
Delete "$INSTDIR\uninstall.ini" |
|
|
|
${If} $doLocalConf == "false" |
|
Call un.doYouReallyWantToKeepData |
|
${endIf} |
|
|
|
${If} $keepUserData == "false" |
|
; make context as current user to uninstall user's APPDATA |
|
SetShellVarContext current |
|
Delete "$APPDATA\${APPNAME}\langs.xml" |
|
Delete "$APPDATA\${APPNAME}\config.xml" |
|
Delete "$APPDATA\${APPNAME}\stylers.xml" |
|
Delete "$APPDATA\${APPNAME}\contextMenu.xml" |
|
Delete "$APPDATA\${APPNAME}\shortcuts.xml" |
|
Delete "$APPDATA\${APPNAME}\functionList.xml" |
|
Delete "$APPDATA\${APPNAME}\nativeLang.xml" |
|
Delete "$APPDATA\${APPNAME}\session.xml" |
|
Delete "$APPDATA\${APPNAME}\userDefineLang.xml" |
|
Delete "$APPDATA\${APPNAME}\insertExt.ini" |
|
Delete "$APPDATA\${APPNAME}\nppLogNulContentCorruptionIssue.log" |
|
Delete "$APPDATA\${APPNAME}\tabContextMenu_example.xml" |
|
Delete "$APPDATA\${APPNAME}\toolbarIcons.xml" |
|
Delete "$APPDATA\${APPNAME}\userDefineLangs\userDefinedLang-markdown.default.modern.xml" |
|
Delete "$APPDATA\${APPNAME}\userDefineLangs\markdown._preinstalled.udl.xml" |
|
Delete "$APPDATA\${APPNAME}\userDefineLangs\markdown._preinstalled_DM.udl.xml" |
|
RMDir /r "$APPDATA\${APPNAME}\plugins\" |
|
RMDir /r "$APPDATA\${APPNAME}\backup\" ; Remove backup folder recursively if not empty |
|
RMDir "$APPDATA\${APPNAME}\themes\" ; has no effect as not empty at this moment, but it is taken care at un.onUninstSuccess |
|
RMDir "$APPDATA\${APPNAME}" ; has no effect as not empty at this moment, but it is taken care at un.onUninstSuccess |
|
|
|
StrCmp $1 "Admin" 0 +2 |
|
SetShellVarContext all ; make context for all user |
|
${endIf} |
|
|
|
; In order to not delete context menu binary before we unregistered it, |
|
; we delete them at the end, using the CleanupDll function, since it can be locked by explorer. |
|
IfFileExists "$INSTDIR\contextmenu\NppShell.dll" 0 +2 |
|
ExecWait 'rundll32.exe "$INSTDIR\contextmenu\NppShell.dll",CleanupDll' |
|
Delete "$INSTDIR\contextmenu\NppShell.msix" |
|
|
|
|
|
; Remove remaining directories |
|
RMDir /r "$INSTDIR\plugins\disabled\" |
|
RMDir "$INSTDIR\plugins\APIs\" |
|
RMDir "$INSTDIR\plugins\" |
|
RMDir "$INSTDIR\themes\" |
|
RMDir "$INSTDIR\localization\" |
|
RMDir "$INSTDIR\functionList\" |
|
RMDir "$INSTDIR\contextmenu\" |
|
RMDir "$INSTDIR\" |
|
RMDir "$SMPROGRAMS\${APPNAME}" |
|
|
|
SectionEnd |
|
|
|
|
|
|