| ; CPack install script designed for a nmake build |
| |
| ;-------------------------------- |
| ; You must define these values |
| |
| !define VERSION "@CPACK_PACKAGE_VERSION@" |
| !define PATCH "@CPACK_PACKAGE_VERSION_PATCH@" |
| !define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@" |
| |
| ;-------------------------------- |
| ;Variables |
| |
| Var MUI_TEMP |
| Var STARTMENU_FOLDER |
| Var SV_ALLUSERS |
| Var START_MENU |
| Var DO_NOT_ADD_TO_PATH |
| Var ADD_TO_PATH_ALL_USERS |
| Var ADD_TO_PATH_CURRENT_USER |
| |
| ;-------------------------------- |
| ;Include Modern UI |
| |
| !include "MUI.nsh" |
| |
| ;Default installation folder |
| InstallDir "$PROGRAMFILES\@CPACK_PACKAGE_INSTALL_DIRECTORY@" |
| |
| ;-------------------------------- |
| ; determine admin versus local install |
| ; Is install for "AllUsers" or "JustMe"? |
| ; Default to "JustMe" - set to "AllUsers" if admin or on Win9x |
| ; This function is used for the very first "custom page" of the installer. |
| ; This custom page does not show up visibly, but it executes prior to the |
| ; first visible page and sets up $INSTDIR properly... |
| ; Choose different default installation folder based on SV_ALLUSERS... |
| ; "Program Files" for AllUsers, "My Documents" for JustMe... |
| |
| Function .onInit |
| StrCpy $SV_ALLUSERS "JustMe" |
| StrCpy $INSTDIR "$DOCUMENTS\@CPACK_PACKAGE_INSTALL_DIRECTORY@" |
| |
| ClearErrors |
| UserInfo::GetName |
| IfErrors noLM |
| Pop $0 |
| UserInfo::GetAccountType |
| Pop $1 |
| StrCmp $1 "Admin" 0 +3 |
| SetShellVarContext all |
| ;MessageBox MB_OK 'User "$0" is in the Admin group' |
| StrCpy $SV_ALLUSERS "AllUsers" |
| Goto done |
| StrCmp $1 "Power" 0 +3 |
| SetShellVarContext all |
| ;MessageBox MB_OK 'User "$0" is in the Power Users group' |
| StrCpy $SV_ALLUSERS "AllUsers" |
| Goto done |
| |
| noLM: |
| StrCpy $SV_ALLUSERS "AllUsers" |
| ;Get installation folder from registry if available |
| |
| done: |
| StrCmp $SV_ALLUSERS "AllUsers" 0 +2 |
| StrCpy $INSTDIR "$PROGRAMFILES\@CPACK_PACKAGE_INSTALL_DIRECTORY@" |
| |
| StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 noOptionsPage |
| !insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini" |
| |
| noOptionsPage: |
| FunctionEnd |
| |
| ;-------------------------------- |
| ;General |
| |
| ;Name and file |
| Name "@CPACK_PACKAGE_INSTALL_DIRECTORY@" |
| OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@" |
| |
| ;-------------------------------- |
| ;Interface Settings |
| |
| !define MUI_HEADERIMAGE |
| !define MUI_ABORTWARNING |
| |
| ;-------------------------------- |
| ; path functions |
| |
| !verbose 3 |
| !include "WinMessages.NSH" |
| !verbose 4 |
| |
| ;---------------------------------------- |
| ; based upon a script of "Written by KiCHiK 2003-01-18 05:57:02" |
| ;---------------------------------------- |
| !verbose 3 |
| !include "WinMessages.NSH" |
| !verbose 4 |
| ;==================================================== |
| ; get_NT_environment |
| ; Returns: the selected environment |
| ; Output : head of the stack |
| ;==================================================== |
| !macro select_NT_profile UN |
| Function ${UN}select_NT_profile |
| StrCmp $ADD_TO_PATH_ALL_USERS "1" 0 environment_single |
| DetailPrint "Selected environment for all users" |
| Push "all" |
| Return |
| environment_single: |
| DetailPrint "Selected environment for current user only." |
| Push "current" |
| Return |
| FunctionEnd |
| !macroend |
| !insertmacro select_NT_profile "" |
| !insertmacro select_NT_profile "un." |
| ;---------------------------------------------------- |
| !define NT_current_env 'HKCU "Environment"' |
| !define NT_all_env 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' |
| ;==================================================== |
| ; AddToPath - Adds the given dir to the search path. |
| ; Input - head of the stack |
| ; Note - Win9x systems requires reboot |
| ;==================================================== |
| Function AddToPath |
| Exch $0 |
| Push $1 |
| Push $2 |
| |
| Call IsNT |
| Pop $1 |
| StrCmp $1 1 AddToPath_NT |
| ; Not on NT |
| StrCpy $1 $WINDIR 2 |
| FileOpen $1 "$1\autoexec.bat" a |
| FileSeek $1 0 END |
| GetFullPathName /SHORT $0 $0 |
| FileWrite $1 "$\r$\n\ |
| $\r$\n\ |
| SET PATH=%PATH%;$0$\r$\n\ |
| $\r$\n\ |
| " |
| FileClose $1 |
| Goto AddToPath_done |
| |
| AddToPath_NT: |
| Push $4 |
| Call select_NT_profile |
| Pop $4 |
| |
| AddToPath_NT_selection_done: |
| StrCmp $4 "current" read_path_NT_current |
| ReadRegStr $1 ${NT_all_env} "PATH" |
| Goto read_path_NT_resume |
| read_path_NT_current: |
| ReadRegStr $1 ${NT_current_env} "PATH" |
| read_path_NT_resume: |
| StrCmp $1 "" AddToPath_NoCurrentPath |
| StrCpy $2 "$0;$1" |
| Goto AddToPath_NTdoIt |
| AddToPath_NoCurrentPath: |
| DetailPrint "No current path, so just use $0" |
| StrCpy $2 $0 |
| Goto AddToPath_NTdoIt |
| AddToPath_NTdoIt: |
| StrCmp $4 "current" write_path_NT_current |
| ClearErrors |
| WriteRegExpandStr ${NT_all_env} "PATH" $2 |
| IfErrors 0 write_path_NT_resume |
| MessageBox MB_YESNO|MB_ICONQUESTION "The path could not be set for all users$\n\ |
| $\n\ |
| Should I try for the current user?" \ |
| IDNO write_path_NT_failed |
| ; change selection |
| StrCpy $4 "current" |
| Goto AddToPath_NT_selection_done |
| write_path_NT_current: |
| ClearErrors |
| WriteRegExpandStr ${NT_current_env} "PATH" $2 |
| IfErrors 0 write_path_NT_resume |
| MessageBox MB_OK|MB_ICONINFORMATION "The path could not be set for the current user." |
| Goto write_path_NT_failed |
| write_path_NT_resume: |
| SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 |
| DetailPrint "Added path for user ($4), $0" |
| DetailPrint "New path is: $2" |
| write_path_NT_failed: |
| |
| Pop $4 |
| AddToPath_done: |
| Pop $2 |
| Pop $1 |
| Pop $0 |
| FunctionEnd |
| |
| ;==================================================== |
| ; RemoveFromPath - Remove a given dir from the path |
| ; Input: head of the stack |
| ;==================================================== |
| Function un.RemoveFromPath |
| Exch $0 |
| Push $1 |
| Push $2 |
| Push $3 |
| Push $4 |
| |
| Call un.IsNT |
| Pop $1 |
| StrCmp $1 1 unRemoveFromPath_NT |
| ; Not on NT |
| StrCpy $1 $WINDIR 2 |
| FileOpen $1 "$1\autoexec.bat" r |
| GetTempFileName $4 |
| FileOpen $2 $4 w |
| GetFullPathName /SHORT $0 $0 |
| StrCpy $0 "SET PATH=%PATH%;$0" |
| SetRebootFlag true |
| Goto unRemoveFromPath_dosLoop |
| |
| unRemoveFromPath_dosLoop: |
| FileRead $1 $3 |
| StrCmp $3 "$0$$\r$\n\ |
| $\r$\n\ |
| " unRemoveFromPath_dosLoop |
| StrCmp $3 "$0$\r$\n\ |
| " unRemoveFromPath_dosLoop |
| StrCmp $3 "$0" unRemoveFromPath_dosLoop |
| StrCmp $3 "" unRemoveFromPath_dosLoopEnd |
| FileWrite $2 $3 |
| Goto unRemoveFromPath_dosLoop |
| |
| unRemoveFromPath_dosLoopEnd: |
| FileClose $2 |
| FileClose $1 |
| StrCpy $1 $WINDIR 2 |
| Delete "$1\autoexec.bat" |
| CopyFiles /SILENT $4 "$1\autoexec.bat" |
| Delete $4 |
| Goto unRemoveFromPath_done |
| |
| unRemoveFromPath_NT: |
| StrLen $2 $0 |
| Call un.select_NT_profile |
| Pop $4 |
| |
| StrCmp $4 "current" un_read_path_NT_current |
| ReadRegStr $1 ${NT_all_env} "PATH" |
| Goto un_read_path_NT_resume |
| un_read_path_NT_current: |
| ReadRegStr $1 ${NT_current_env} "PATH" |
| un_read_path_NT_resume: |
| |
| StrCpy $8 $0 |
| Push $1 |
| Push $0 |
| Call un.StrStr ; Find $0 in $1 |
| Pop $0 ; pos of our dir |
| IntCmp $0 -1 unRemoveFromPath_done |
| ; else, it is in path |
| StrLen $5 $1 ; Get the length of the original path |
| StrLen $6 $0 ; get the length of path without the first path |
| IntOp $5 $5 - $6 |
| IntOp $5 $5 - 1 |
| IntCmp $5 -1 unRemoveFromPath_nothingBefore |
| StrCpy $3 $1 $5 ; $3 now has the part of the path before our dir |
| Goto unRemoveFromPath_AfterBefore |
| unRemoveFromPath_nothingBefore: |
| StrCpy $3 "" |
| unRemoveFromPath_AfterBefore: |
| StrCpy $7 $0 "" $2 ; $3 now has the part of the path after our dir |
| StrCpy $3 "$3$7" |
| |
| ; $3 now holds path, but there may be some stray semicolon at |
| ; beginning. Let's remove it |
| StrCpy $7 $3 1 |
| StrCmp $7 ";" 0 unRemoveFromPath_NoTrailingSemiColon |
| StrCpy $3 $3 "" 1 |
| unRemoveFromPath_NoTrailingSemiColon: |
| |
| StrCmp $4 "current" un_write_path_NT_current |
| WriteRegExpandStr ${NT_all_env} "PATH" $3 |
| Goto un_write_path_NT_resume |
| un_write_path_NT_current: |
| WriteRegExpandStr ${NT_current_env} "PATH" $3 |
| un_write_path_NT_resume: |
| SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 |
| DetailPrint "Removed $8 from the path" |
| DetailPrint "New path is: $3" |
| unRemoveFromPath_done: |
| Pop $4 |
| Pop $3 |
| Pop $2 |
| Pop $1 |
| Pop $0 |
| FunctionEnd |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| ; Uninstall sutff |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| |
| ########################################### |
| # Utility Functions # |
| ########################################### |
| |
| ;==================================================== |
| ; IsNT - Returns 1 if the current system is NT, 0 |
| ; otherwise. |
| ; Output: head of the stack |
| ;==================================================== |
| ; IsNT |
| ; no input |
| ; output, top of the stack = 1 if NT or 0 if not |
| ; |
| ; Usage: |
| ; Call IsNT |
| ; Pop $R0 |
| ; ($R0 at this point is 1 or 0) |
| |
| !macro IsNT un |
| Function ${un}IsNT |
| Push $0 |
| ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion |
| StrCmp $0 "" 0 IsNT_yes |
| ; we are not NT. |
| Pop $0 |
| Push 0 |
| Return |
| |
| IsNT_yes: |
| ; NT!!! |
| Pop $0 |
| Push 1 |
| FunctionEnd |
| !macroend |
| !insertmacro IsNT "" |
| !insertmacro IsNT "un." |
| |
| ; StrStr |
| ; input, top of stack = string to search for |
| ; top of stack-1 = string to search in |
| ; output, top of stack (replaces with the portion of the string remaining) |
| ; modifies no other variables. |
| ; |
| ; Usage: |
| ; Push "this is a long ass string" |
| ; Push "ass" |
| ; Call StrStr |
| ; Pop $R0 |
| ; ($R0 at this point is "ass string") |
| |
| !macro StrStr un |
| Function ${un}StrStr |
| Exch $R1 ; st=haystack,old$R1, $R1=needle |
| Exch ; st=old$R1,haystack |
| Exch $R2 ; st=old$R1,old$R2, $R2=haystack |
| Push $R3 |
| Push $R4 |
| Push $R5 |
| StrLen $R3 $R1 |
| StrCpy $R4 0 |
| ; $R1=needle |
| ; $R2=haystack |
| ; $R3=len(needle) |
| ; $R4=cnt |
| ; $R5=tmp |
| loop: |
| StrCpy $R5 $R2 $R3 $R4 |
| StrCmp $R5 $R1 done |
| StrCmp $R5 "" done |
| IntOp $R4 $R4 + 1 |
| Goto loop |
| done: |
| StrCpy $R1 $R2 "" $R4 |
| Pop $R5 |
| Pop $R4 |
| Pop $R3 |
| Pop $R2 |
| Exch $R1 |
| FunctionEnd |
| !macroend |
| !insertmacro StrStr "" |
| !insertmacro StrStr "un." |
| |
| Function ConditionalAddToRegisty |
| Pop $0 |
| Pop $1 |
| StrCmp "$0" "" ConditionalAddToRegisty_EmptyString |
| WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_DIRECTORY@" \ |
| "$1" "$0" |
| ;MessageBox MB_OK "Set Registry: '$1' to '$0'" |
| DetailPrint "Set install registry entry: '$1' to '$0'" |
| ConditionalAddToRegisty_EmptyString: |
| FunctionEnd |
| |
| ;-------------------------------- |
| ; Define some macro setting for the gui |
| |
| !define CPACK_PACKAGE_ICON@CPACK_PACKAGE_ICON@ |
| !ifndef CPACK_PACKAGE_ICON |
| !define MUI_HEADERIMAGE_BITMAP "@CPACK_PACKAGE_ICON@" |
| !endif |
| |
| ;-------------------------------- |
| ;Pages |
| !insertmacro MUI_PAGE_WELCOME |
| |
| !insertmacro MUI_PAGE_LICENSE "@CPACK_RESOURCE_FILE_LICENSE@" |
| Page custom InstallOptionsPage |
| !insertmacro MUI_PAGE_DIRECTORY |
| |
| ;Start Menu Folder Page Configuration |
| !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX" |
| !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" |
| !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" |
| !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER |
| |
| !insertmacro MUI_PAGE_INSTFILES |
| !insertmacro MUI_PAGE_FINISH |
| |
| !insertmacro MUI_UNPAGE_CONFIRM |
| !insertmacro MUI_UNPAGE_INSTFILES |
| |
| ;-------------------------------- |
| ;Languages |
| |
| !insertmacro MUI_LANGUAGE "English" |
| |
| ;-------------------------------- |
| ;Reserve Files |
| |
| ;These files should be inserted before other files in the data block |
| ;Keep these lines before any File command |
| ;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA) |
| |
| ReserveFile "NSIS.InstallOptions.ini" |
| !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS |
| |
| |
| ;-------------------------------- |
| ;Installer Sections |
| |
| Section "Add to path" |
| Push $INSTDIR\bin |
| ;Read a value from an InstallOptions INI file |
| !insertmacro MUI_INSTALLOPTIONS_READ $DO_NOT_ADD_TO_PATH "NSIS.InstallOptions.ini" "Field 2" "State" |
| !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_ALL_USERS "NSIS.InstallOptions.ini" "Field 3" "State" |
| !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_CURRENT_USER "NSIS.InstallOptions.ini" "Field 4" "State" |
| StrCmp $DO_NOT_ADD_TO_PATH "1" doNotAddToPath 0 |
| Call AddToPath |
| doNotAddToPath: |
| SectionEnd |
| |
| Section "Installer Section" InstSection |
| |
| ;Use the entire tree produced by the INSTALL target. Keep the |
| ;list of directories here in sync with the RMDir commands below. |
| SetOutPath "$INSTDIR" |
| File /r "${INST_DIR}\*.*" |
| |
| ;Store installation folder |
| WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR |
| |
| ;Create uninstaller |
| WriteUninstaller "$INSTDIR\Uninstall.exe" |
| Push "DisplayName" |
| Push "@CPACK_NSIS_DISPLAY_NAME@" |
| Call ConditionalAddToRegisty |
| Push "DisplayVersion" |
| Push "@CPACK_PACKAGE_VERSION@" |
| Call ConditionalAddToRegisty |
| Push "Publisher" |
| Push "@CPACK_PACKAGE_VENDOR@" |
| Call ConditionalAddToRegisty |
| Push "UninstallString" |
| Push "$INSTDIR\Uninstall.exe" |
| Call ConditionalAddToRegisty |
| |
| ; Optional registration |
| Push "DisplayIcon" |
| Push "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@" |
| Call ConditionalAddToRegisty |
| Push "HelpLink" |
| Push "@CPACK_NSIS_HELP_LINK@" |
| Call ConditionalAddToRegisty |
| Push "URLInfoAbout" |
| Push "@CPACK_NSIS_URL_INFO_ABOUT@" |
| Call ConditionalAddToRegisty |
| Push "Contact" |
| Push "@CPACK_NSIS_CONTACT@" |
| Call ConditionalAddToRegisty |
| |
| !insertmacro MUI_STARTMENU_WRITE_BEGIN Application |
| |
| ;Create shortcuts |
| CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" |
| @CPACK_NSIS_CREATE_ICONS@ |
| CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe" |
| |
| ; Write special uninstall registry entries |
| Push "StartMenu" |
| Push "$STARTMENU_FOLDER" |
| Call ConditionalAddToRegisty |
| Push "DoNotAddToPath" |
| Push "$DO_NOT_ADD_TO_PATH" |
| Call ConditionalAddToRegisty |
| Push "AddToPathAllUsers" |
| Push "$ADD_TO_PATH_ALL_USERS" |
| Call ConditionalAddToRegisty |
| Push "AddToPathCurrentUser" |
| Push "$ADD_TO_PATH_CURRENT_USER" |
| Call ConditionalAddToRegisty |
| |
| @CPACK_NSIS_EXTRA_INSTALL_COMMANDS@ |
| |
| !insertmacro MUI_STARTMENU_WRITE_END |
| |
| SectionEnd |
| |
| ;-------------------------------- |
| ; Create custom pages |
| Function InstallOptionsPage |
| !insertmacro MUI_HEADER_TEXT "Install Options" "Chose options for installing @CPACK_PACKAGE_INSTALL_DIRECTORY@" |
| !insertmacro MUI_INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini" |
| |
| FunctionEnd |
| |
| ;-------------------------------- |
| ; determine admin versus local install |
| Function un.onInit |
| |
| ClearErrors |
| UserInfo::GetName |
| IfErrors noLM |
| Pop $0 |
| UserInfo::GetAccountType |
| Pop $1 |
| StrCmp $1 "Admin" 0 +3 |
| SetShellVarContext all |
| ;MessageBox MB_OK 'User "$0" is in the Admin group' |
| Goto done |
| StrCmp $1 "Power" 0 +3 |
| SetShellVarContext all |
| ;MessageBox MB_OK 'User "$0" is in the Power Users group' |
| Goto done |
| |
| noLM: |
| ;Get installation folder from registry if available |
| |
| done: |
| FunctionEnd |
| |
| ;-------------------------------- |
| ;Uninstaller Section |
| |
| Section "Uninstall" |
| ReadRegStr $START_MENU SHCTX \ |
| "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_DIRECTORY@" "StartMenu" |
| ;MessageBox MB_OK "Start menu is in: $START_MENU" |
| ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \ |
| "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_DIRECTORY@" "DoNotAddToPath" |
| ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \ |
| "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_DIRECTORY@" "AddToPathAllUsers" |
| ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \ |
| "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_DIRECTORY@" "AddToPathCurrentUser" |
| ;MessageBox MB_OK "Add to path: $DO_NOT_ADD_TO_PATH all users: $ADD_TO_PATH_ALL_USERS" |
| |
| @CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS@ |
| |
| ;Remove files we installed. |
| ;Keep the list of directories here in sync with the File commands above. |
| @CPACK_NSIS_DELETE_FILES@ |
| @CPACK_NSIS_DELETE_DIRECTORIES@ |
| |
| ;Remove the uninstaller itself. |
| Delete "$INSTDIR\Uninstall.exe" |
| DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_DIRECTORY@" |
| |
| ;Remove the installation directory if it is empty. |
| RMDir "$INSTDIR" |
| |
| ; Remove the registry entries. |
| DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" |
| |
| !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP |
| |
| Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" |
| @CPACK_NSIS_DELETE_ICONS@ |
| |
| ;Delete empty start menu parent diretories |
| StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" |
| |
| startMenuDeleteLoop: |
| ClearErrors |
| RMDir $MUI_TEMP |
| GetFullPathName $MUI_TEMP "$MUI_TEMP\.." |
| |
| IfErrors startMenuDeleteLoopDone |
| |
| StrCmp "$MUI_TEMP" "$SMPROGRAMS" startMenuDeleteLoopDone startMenuDeleteLoop |
| startMenuDeleteLoopDone: |
| |
| ; If the user changed the shortcut, then untinstall may not work. This should |
| ; try to fix it. |
| StrCpy $MUI_TEMP "$START_MENU" |
| Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" |
| @CPACK_NSIS_DELETE_ICONS@ |
| |
| ;Delete empty start menu parent diretories |
| StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" |
| |
| secondStartMenuDeleteLoop: |
| ClearErrors |
| RMDir $MUI_TEMP |
| GetFullPathName $MUI_TEMP "$MUI_TEMP\.." |
| |
| IfErrors secondStartMenuDeleteLoopDone |
| |
| StrCmp "$MUI_TEMP" "$SMPROGRAMS" secondStartMenuDeleteLoopDone secondStartMenuDeleteLoop |
| secondStartMenuDeleteLoopDone: |
| |
| DeleteRegKey /ifempty SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" |
| |
| Push $INSTDIR\bin |
| StrCmp $DO_NOT_ADD_TO_PATH_ "1" doNotRemoveFromPath 0 |
| Call un.RemoveFromPath |
| doNotRemoveFromPath: |
| SectionEnd |
| |
| |