Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;_____________________________ HEADER FILE BEGIN ____________________________
- # Advanced Uninstall Log NSIS header
- # Version 1.0 2007-01-31
- # By Red Wine (http://nsis.sf.net/User:Red_Wine)
- # Usage: See included examples Uninstall_Log_Default_UI.nsi - Uninstall_Log_Modern_UI.nsi
- !verbose push
- !verbose 3
- !ifndef ADVANCED_UNINSTALL.LOG_NSH
- !define ADVANCED_UNINSTALL.LOG_NSH
- !ifndef INSTDIR_REG_ROOT | INSTDIR_REG_KEY
- !error "You must properly define both INSTDIR_REG_ROOT and INSTDIR_REG_KEY"
- !endif
- !ifndef UNINSTALL_LOG
- !define UNINSTALL_LOG "Uninstall"
- !endif
- !ifndef UNINST_LOG_VERBOSE
- !define UNINST_LOG_VERBOSE "3"
- !endif
- !verbose pop
- !echo "Advanced Uninstall Log NSIS header v1.0 2007-01-31 by Red Wine (http://nsis.sf.net/User:Red_Wine)"
- !verbose push
- !verbose ${UNINST_LOG_VERBOSE}
- var unlog_header
- var unlog_dat_not_found
- var unlog_del_file
- var unlog_del_dir
- var unlog_empty_dir
- var unlog_error_log
- var unlog_error_create
- !define UNINST_EXE "$INSTDIR\${UNINSTALL_LOG}.exe"
- !define UNINST_DAT "$INSTDIR\${UNINSTALL_LOG}.dat"
- !define UNLOG_PART "$PLUGINSDIR\part."
- !define UNLOG_TEMP "$PLUGINSDIR\unlog.tmp"
- !define EXCLU_LIST "$PLUGINSDIR\exclude.tmp"
- !define UNLOG_HEAD "$unlog_header"
- var unlog_tmp_0
- var unlog_tmp_1
- var unlog_tmp_2
- var unlog_tmp_3
- var unlog_error
- !include FileFunc.nsh
- !include TextFunc.nsh
- !insertmacro Locate
- !insertmacro un.Locate
- !insertmacro DirState
- !insertmacro un.DirState
- !insertmacro FileJoin
- !insertmacro TrimNewLines
- !insertmacro un.TrimNewLines
- ;.............................. Uninstaller Macros ..............................
- !macro UNINSTALL.LOG_BEGIN_UNINSTALL
- !verbose push
- !verbose ${UNINST_LOG_VERBOSE}
- IfFileExists "${UNINST_DAT}" +3
- MessageBox MB_ICONSTOP|MB_OK $unlog_dat_not_found /SD IDOK
- Quit
- StrCmp "$PLUGINSDIR" "" 0 +2
- InitPluginsDir
- CopyFiles "${UNINST_DAT}" "${UNLOG_TEMP}"
- FileOpen $unlog_tmp_2 "${UNLOG_TEMP}" r
- !verbose pop
- !macroend
- !macro UNINSTALL.LOG_END_UNINSTALL
- !verbose push
- !verbose ${UNINST_LOG_VERBOSE}
- FileClose $unlog_tmp_2
- DeleteRegValue ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}" "${UNINSTALL_LOG}.dat"
- DeleteRegValue ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}" "${UNINSTALL_LOG}Directory"
- !verbose pop
- !macroend
- !macro UNINSTALL.LOG_UNINSTALL TargetDir
- !verbose push
- !verbose ${UNINST_LOG_VERBOSE}
- !ifndef INTERACTIVE_UNINSTALL & UNATTENDED_UNINSTALL
- !error "You must insert either Interactive or Unattended Uninstall neither both, neither none."
- !endif
- !ifdef INTERACTIVE_UNINSTALL
- GetTempFileName $unlog_tmp_5 "$PLUGINSDIR"
- FileOpen $unlog_tmp_4 "$unlog_tmp_5" a
- !endif
- ${PerfomUninstall} "${TargetDir}" "${UnLog_Uninstall_CallBackFunc}"
- !ifdef INTERACTIVE_UNINSTALL
- FileClose $unlog_tmp_4
- !endif
- !verbose pop
- !macroend
- !define PerfomUninstall "!insertmacro PERFORMUNINSTALL"
- !macro PERFORMUNINSTALL TargetDir UninstCallBackFunc
- !verbose push
- !verbose ${UNINST_LOG_VERBOSE}
- !define ID ${__LINE__}
- ${un.Locate} "${TargetDir}" "/L=F" "${UninstCallBackFunc}"
- loop_${ID}:
- StrCpy $unlog_tmp_1 0
- ${un.Locate} "${TargetDir}" "/L=DE" "${UninstCallBackFunc}"
- StrCmp $unlog_tmp_1 "0" 0 loop_${ID}
- ${un.DirState} "${TargetDir}" $unlog_tmp_0
- StrCmp "$unlog_tmp_0" "0" 0 +2
- RmDir "${TargetDir}"
- IfErrors 0 +2
- MessageBox MB_ICONEXCLAMATION|MB_OK "$unlog_error_log" /SD IDOK
- !undef ID
- !verbose pop
- !macroend
- !macro INTERACTIVE_UNINSTALL
- !verbose push
- !verbose ${UNINST_LOG_VERBOSE}
- !ifdef INTERACTIVE_UNINSTALL
- !error "INTERACTIVE_UNINSTALL is already defined"
- !endif
- var unlog_tmp_4
- var unlog_tmp_5
- !define INTERACTIVE_UNINSTALL
- !ifdef INTERACTIVE_UNINSTALL & UNATTENDED_UNINSTALL
- !error "You must insert either Interactive or Unattended Uninstall neither both, neither none."
- !endif
- !ifdef UnLog_Uninstall_CallBackFunc
- !undef UnLog_Uninstall_CallBackFunc
- !endif
- !ifndef UnLog_Uninstall_CallBackFunc
- !insertmacro UNINSTALL.LOG_UNINSTALL_INTERACTIVE
- !define UnLog_Uninstall_CallBackFunc "un._LocateCallBack_Function_Interactive"
- !endif
- !verbose pop
- !macroend
- !macro UNATTENDED_UNINSTALL
- !verbose push
- !verbose ${UNINST_LOG_VERBOSE}
- !ifdef UNATTENDED_UNINSTALL
- !error "UNATTENDED_UNINSTALL is already defined"
- !endif
- !define UNATTENDED_UNINSTALL
- !ifdef INTERACTIVE_UNINSTALL & UNATTENDED_UNINSTALL
- !error "You must insert either Interactive or Unattended Uninstall neither both, neither none."
- !endif
- !ifdef UnLog_Uninstall_CallBackFunc
- !undef UnLog_Uninstall_CallBackFunc
- !endif
- !ifndef UnLog_Uninstall_CallBackFunc
- !insertmacro UNINSTALL.LOG_UNINSTALL_UNATTENDED
- !define UnLog_Uninstall_CallBackFunc "un._LocateCallBack_Function_Unattended"
- !endif
- !verbose pop
- !macroend
- !macro UNINSTALL.LOG_UNINSTALL_UNATTENDED
- Function un._LocateCallBack_Function_Unattended
- start:
- FileRead $unlog_tmp_2 "$unlog_tmp_3" ${NSIS_MAX_STRLEN}
- ${un.TrimNewLines} "$unlog_tmp_3" "$unlog_tmp_3"
- StrCmp "$unlog_tmp_3" "$R9" islog
- IfErrors nolog
- goto start
- islog:
- IfFileExists "$R9\*.*" isdir
- isfile:
- Delete "$R9"
- goto end
- isdir:
- RmDir "$R9"
- IntOp $unlog_tmp_1 $unlog_tmp_1 + 1
- goto end
- nolog:
- ClearErrors
- StrCmp "$R9" "${UNINST_EXE}" isfile
- StrCmp "$R9" "${UNINST_DAT}" isfile
- end:
- FileSeek $unlog_tmp_2 0 SET
- Push $unlog_tmp_0
- FunctionEnd
- !macroend
- !macro UNINSTALL.LOG_UNINSTALL_INTERACTIVE
- Function un._LocateCallBack_Function_Interactive
- start:
- FileRead $unlog_tmp_2 "$unlog_tmp_3" ${NSIS_MAX_STRLEN}
- ${un.TrimNewLines} "$unlog_tmp_3" "$unlog_tmp_3"
- StrCmp "$unlog_tmp_3" "$R9" islog
- IfErrors nolog
- goto start
- islog:
- IfFileExists "$R9\*.*" isdir
- isfile:
- Delete "$R9"
- goto end
- isdir:
- RmDir "$R9"
- IntOp $unlog_tmp_1 $unlog_tmp_1 + 1
- goto end
- nolog:
- ClearErrors
- FileSeek $unlog_tmp_4 0 SET
- read:
- FileRead $unlog_tmp_4 "$unlog_tmp_3"
- ${un.TrimNewLines} "$unlog_tmp_3" "$unlog_tmp_3"
- StrCmp "$unlog_tmp_3" "$R9" end
- IfErrors +2
- goto read
- ClearErrors
- StrCmp "$R9" "${UNINST_EXE}" isfile
- StrCmp "$R9" "${UNINST_DAT}" isfile
- IfFileExists "$R9\*.*" msgdir
- MessageBox MB_ICONQUESTION|MB_YESNO "$unlog_del_file" /SD IDNO IDYES isfile IDNO nodel
- msgdir:
- MessageBox MB_ICONQUESTION|MB_YESNO "$unlog_del_dir" /SD IDNO IDYES isdir IDNO nodel
- nodel:
- FileSeek $unlog_tmp_4 0 END
- FileWrite $unlog_tmp_4 "$R9$\r$\n"
- end:
- FileSeek $unlog_tmp_2 0 SET
- Push $unlog_tmp_0
- FunctionEnd
- !macroend
- ;................................. Installer Macros .................................
- !macro UNINSTALL.LOG_INSTALL_UNATTENDED
- Function _LocateCallBack_Function_Install
- loop:
- FileRead $unlog_tmp_2 "$unlog_tmp_3" ${NSIS_MAX_STRLEN}
- ${TrimNewLines} "$unlog_tmp_3" "$unlog_tmp_3"
- IfErrors 0 +4
- ClearErrors
- FileSeek $unlog_tmp_2 0 SET
- goto next
- StrCmp "$R9" "$unlog_tmp_3" end
- goto loop
- next:
- FileWrite $unlog_tmp_1 "$R9$\r$\n"
- end:
- Push $unlog_tmp_0
- FunctionEnd
- !macroend
- !ifdef UnLog_Install_Func_CallBack
- !undef UnLog_Install_Func_CallBack
- !endif
- !ifndef UnLog_Install_Func_CallBack
- !insertmacro UNINSTALL.LOG_INSTALL_UNATTENDED
- !define UnLog_Install_Func_CallBack "_LocateCallBack_Function_Install"
- !endif
- !macro UNINSTALL.LOG_PREPARE_INSTALL
- !verbose push
- !verbose ${UNINST_LOG_VERBOSE}
- Push $0
- Push $1
- ClearErrors
- ReadRegStr "$0" ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}" "${UNINSTALL_LOG}Directory"
- IfErrors next
- ${DirState} "$0" $1
- StrCmp "$1" "-1" next
- StrCmp "$1" "0" next
- IfFileExists "$0\${UNINSTALL_LOG}.dat" next
- MessageBox MB_ICONEXCLAMATION|MB_OK "$unlog_empty_dir" /SD IDOK
- StrCpy $unlog_error "error"
- next:
- ClearErrors
- StrCmp "$PLUGINSDIR" "" 0 +2
- InitPluginsDir
- StrCpy $unlog_header "=========== Uninstaller Log please do not edit this file ==========="
- StrCpy $unlog_dat_not_found "${UNINST_DAT} not found, unable to perform uninstall."
- StrCpy $unlog_del_file 'Delete File "$R9"?'
- StrCpy $unlog_del_dir 'Delete Directory "$R9"?'
- StrCpy $unlog_empty_dir "Previous installation detected at $0.$\nRequired file ${UNINSTALL_LOG}.dat is missing.$\n$\nIt is highly recommended to select an empty directory and perform a fresh installation."
- StrCpy $unlog_error_log "Error in log ${UNINSTALL_LOG}."
- StrCpy $unlog_error_create "Error creating ${UNINSTALL_LOG}."
- !ifdef UNINSTALLOG_LOCALIZE ; Needed to get rid of compiler warnings when not doing any localization
- StrCmp $(UNLOG_HEADER) "" +2 0
- StrCpy $unlog_header $(UNLOG_HEADER)
- StrCmp $(UNLOG_DAT_NOT_FOUND) "" +2 0
- StrCpy $unlog_dat_not_found $(UNLOG_DAT_NOT_FOUND)
- StrCmp $(UNLOG_DEL_FILE) "" +2 0
- StrCpy $unlog_del_file $(UNLOG_DEL_FILE)
- StrCmp $(UNLOG_DEL_DIR) "" +2 0
- StrCpy $unlog_del_dir $(UNLOG_DEL_DIR)
- StrCmp $(UNLOG_EMPTY_DIR) "" +2 0
- StrCpy $unlog_empty_dir $(UNLOG_EMPTY_DIR)
- StrCmp $(UNLOG_ERROR_LOG) "" +2 0
- StrCpy $unlog_error_log $(UNLOG_ERROR_LOG)
- StrCmp $(UNLOG_ERROR_CREATE) "" +2 0
- StrCpy $unlog_error_create $(UNLOG_ERROR_CREATE)
- !endif
- GetTempFileName "$1"
- FileOpen $0 "$1" w
- FileWrite $0 "${UNLOG_HEAD}$\r$\n"
- FileClose $0
- Rename "$1" "${UNLOG_TEMP}"
- Pop $1
- Pop $0
- !verbose pop
- !macroend
- !macro UNINSTALL.LOG_UPDATE_INSTALL
- !verbose push
- !verbose ${UNINST_LOG_VERBOSE}
- Delete "${UNINST_DAT}"
- Rename "${UNLOG_TEMP}" "${UNINST_DAT}"
- WriteUninstaller "${UNINST_EXE}"
- WriteRegStr ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}" "${UNINSTALL_LOG}.dat" "${UNINST_DAT}"
- WriteRegStr ${INSTDIR_REG_ROOT} "${INSTDIR_REG_KEY}" "${UNINSTALL_LOG}Directory" "$INSTDIR"
- !verbose pop
- !macroend
- !define uninstall.log_install "!insertmacro UNINSTALL.LOG_INSTALL"
- !macro UNINSTALL.LOG_INSTALL FileOpenWrite FileOpenRead TargetDir
- !verbose push
- !verbose ${UNINST_LOG_VERBOSE}
- FileOpen $unlog_tmp_1 "${FileOpenWrite}" w
- FileOpen $unlog_tmp_2 "${FileOpenRead}" r
- ${Locate} "${TargetDir}" "/L=FD" "${UnLog_Install_Func_CallBack}"
- StrCmp $unlog_error "error" 0 +2
- ClearErrors
- IfErrors 0 +2
- MessageBox MB_ICONEXCLAMATION|MB_OK "$unlog_error_create" /SD IDOK
- FileClose $unlog_tmp_1
- FileClose $unlog_tmp_2
- !verbose pop
- !macroend
- !define uninstall.log_mergeID "!insertmacro UNINSTALL.LOG_MERGE"
- !macro UNINSTALL.LOG_MERGE UnlogPart
- !verbose push
- !verbose ${UNINST_LOG_VERBOSE}
- ${FileJoin} "${UNLOG_TEMP}" "${UnlogPart}" "${UNLOG_TEMP}"
- !verbose pop
- !macroend
- !macro UNINSTALL.LOG_OPEN_INSTALL
- !verbose push
- !verbose ${UNINST_LOG_VERBOSE}
- StrCmp $unlog_error "error" +2
- ${uninstall.log_install} "${EXCLU_LIST}" "${UNINST_DAT}" "$OUTDIR"
- !verbose pop
- !macroend
- !macro UNINSTALL.LOG_CLOSE_INSTALL
- !verbose push
- !verbose ${UNINST_LOG_VERBOSE}
- !define ID ${__LINE__}
- ${uninstall.log_install} "${UNLOG_PART}${ID}" "${EXCLU_LIST}" "$OUTDIR"
- ${uninstall.log_mergeID} "${UNLOG_PART}${ID}"
- !undef ID ${__LINE__}
- !verbose pop
- !macroend
- !endif
- !verbose pop
- ;_____________________________ HEADER FILE END ____________________________
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement