| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- !include "LogicLib.nsh"
- Var dshFinalDirectory
- Var dshNewDirectory
- Var dshOldDirectory
- Var dshOldMoved
- Var dshNewMoved
- !macro dshExtractPayload FILE
- !ifmacrodef customInstallerExtract
- !insertmacro customInstallerExtract "${FILE}"
- !else
- nsExec::ExecToStack '"$PLUGINSDIR\dsh-7za.exe" x -y -bd -bb0 "-o$INSTDIR" "${FILE}"'
- Pop $R0
- Pop $R1
- !endif
- ${If} $R0 != 0
- DetailPrint $R1
- Call dshRollbackDirectories
- MessageBox MB_OK|MB_ICONEXCLAMATION "$(decompressionFailed)" /SD IDOK
- SetErrorLevel 2
- Quit
- ${EndIf}
- !macroend
- !macro dshStageApplication
- StrCpy $dshFinalDirectory $INSTDIR
- System::Call 'ole32::CoCreateGuid(g .r0) i .r1'
- ${If} $1 != 0
- SetErrorLevel 2
- Quit
- ${EndIf}
- StrCpy $dshNewDirectory "$INSTDIR.new-$0"
- StrCpy $dshOldDirectory "$INSTDIR.old-$0"
- StrCpy $dshOldMoved ""
- StrCpy $dshNewMoved ""
- ClearErrors
- CreateDirectory $dshNewDirectory
- ${If} ${Errors}
- SetErrorLevel 2
- Quit
- ${EndIf}
- File /oname=$PLUGINSDIR\dsh-7za.exe "${DSH_SEVENZIP_PATH}"
- StrCpy $INSTDIR $dshNewDirectory
- SetOutPath $INSTDIR
- !insertmacro installApplicationFiles
- !ifdef DSH_SEVENZIP_LICENSE_DIR
- File /oname=7zip-installer-LICENSE.txt "${DSH_SEVENZIP_LICENSE_DIR}\LICENSE.txt"
- File /oname=7zip-installer-COPYING.txt "${DSH_SEVENZIP_LICENSE_DIR}\COPYING"
- !endif
- !ifdef UNINSTALLER_ICON
- File /oname=uninstallerIcon.ico "${UNINSTALLER_ICON}"
- !endif
- StrCpy $INSTDIR $dshFinalDirectory
- SetOutPath $PLUGINSDIR
- !macroend
- Function .onGUIEnd
- Call dshCleanupDirectories
- FunctionEnd
- Function dshCleanupDirectories
- ${If} $dshFinalDirectory != ""
- Call dshRollbackDirectories
- ${EndIf}
- FunctionEnd
- ; Only directories created or renamed by this installer are removed during rollback.
- Function dshRollbackDirectories
- SetOutPath $PLUGINSDIR
- ${If} $dshNewMoved == "1"
- RMDir /r "\\?\$dshFinalDirectory"
- StrCpy $dshNewMoved ""
- ${EndIf}
- ${If} $dshOldMoved == "1"
- ClearErrors
- Rename $dshOldDirectory $dshFinalDirectory
- ${If} ${Errors}
- ; Leave the complete backup in place if another process prevents restoration.
- DetailPrint $dshOldDirectory
- Return
- ${EndIf}
- StrCpy $dshOldMoved ""
- ${EndIf}
- ${If} $dshNewDirectory != ""
- RMDir /r "\\?\$dshNewDirectory"
- ${EndIf}
- StrCpy $INSTDIR $dshFinalDirectory
- FunctionEnd
- Function dshPromoteDirectories
- !ifmacrodef InstallerPublishStage
- !insertmacro InstallerPublishStage 2
- !endif
- ; SetOutPath opens a directory handle; release it before either rename.
- SetOutPath $PLUGINSDIR
- ClearErrors
- ${If} ${FileExists} "$dshFinalDirectory\*.*"
- Rename $dshFinalDirectory $dshOldDirectory
- ${If} ${Errors}
- Call dshRollbackDirectories
- SetErrors
- Return
- ${EndIf}
- StrCpy $dshOldMoved "1"
- ${Else}
- ; NSIS can create the destination before the install section starts.
- RMDir $dshFinalDirectory
- ${EndIf}
- ClearErrors
- Rename $dshNewDirectory $dshFinalDirectory
- ${If} ${Errors}
- Call dshRollbackDirectories
- SetErrors
- Return
- ${EndIf}
- StrCpy $dshNewMoved "1"
- SetOutPath $dshFinalDirectory
- !ifmacrodef InstallerPublishStage
- !insertmacro InstallerPublishStage 3
- !endif
- ClearErrors
- FunctionEnd
- !macro dshFinishDirectories
- StrCpy $dshNewMoved ""
- ${If} $dshOldMoved == "1"
- RMDir /r "\\?\$dshOldDirectory"
- StrCpy $dshOldMoved ""
- ${EndIf}
- !macroend
|