installer-directories.nsh 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. !include "LogicLib.nsh"
  2. Var dshFinalDirectory
  3. Var dshNewDirectory
  4. Var dshOldDirectory
  5. Var dshOldMoved
  6. Var dshNewMoved
  7. !macro dshExtractPayload FILE
  8. !ifmacrodef customInstallerExtract
  9. !insertmacro customInstallerExtract "${FILE}"
  10. !else
  11. nsExec::ExecToStack '"$PLUGINSDIR\dsh-7za.exe" x -y -bd -bb0 "-o$INSTDIR" "${FILE}"'
  12. Pop $R0
  13. Pop $R1
  14. !endif
  15. ${If} $R0 != 0
  16. DetailPrint $R1
  17. Call dshRollbackDirectories
  18. MessageBox MB_OK|MB_ICONEXCLAMATION "$(decompressionFailed)" /SD IDOK
  19. SetErrorLevel 2
  20. Quit
  21. ${EndIf}
  22. !macroend
  23. !macro dshStageApplication
  24. StrCpy $dshFinalDirectory $INSTDIR
  25. System::Call 'ole32::CoCreateGuid(g .r0) i .r1'
  26. ${If} $1 != 0
  27. SetErrorLevel 2
  28. Quit
  29. ${EndIf}
  30. StrCpy $dshNewDirectory "$INSTDIR.new-$0"
  31. StrCpy $dshOldDirectory "$INSTDIR.old-$0"
  32. StrCpy $dshOldMoved ""
  33. StrCpy $dshNewMoved ""
  34. ClearErrors
  35. CreateDirectory $dshNewDirectory
  36. ${If} ${Errors}
  37. SetErrorLevel 2
  38. Quit
  39. ${EndIf}
  40. File /oname=$PLUGINSDIR\dsh-7za.exe "${DSH_SEVENZIP_PATH}"
  41. StrCpy $INSTDIR $dshNewDirectory
  42. SetOutPath $INSTDIR
  43. !insertmacro installApplicationFiles
  44. !ifdef DSH_SEVENZIP_LICENSE_DIR
  45. File /oname=7zip-installer-LICENSE.txt "${DSH_SEVENZIP_LICENSE_DIR}\LICENSE.txt"
  46. File /oname=7zip-installer-COPYING.txt "${DSH_SEVENZIP_LICENSE_DIR}\COPYING"
  47. !endif
  48. !ifdef UNINSTALLER_ICON
  49. File /oname=uninstallerIcon.ico "${UNINSTALLER_ICON}"
  50. !endif
  51. StrCpy $INSTDIR $dshFinalDirectory
  52. SetOutPath $PLUGINSDIR
  53. !macroend
  54. Function .onGUIEnd
  55. Call dshCleanupDirectories
  56. FunctionEnd
  57. Function dshCleanupDirectories
  58. ${If} $dshFinalDirectory != ""
  59. Call dshRollbackDirectories
  60. ${EndIf}
  61. FunctionEnd
  62. ; Only directories created or renamed by this installer are removed during rollback.
  63. Function dshRollbackDirectories
  64. SetOutPath $PLUGINSDIR
  65. ${If} $dshNewMoved == "1"
  66. RMDir /r "\\?\$dshFinalDirectory"
  67. StrCpy $dshNewMoved ""
  68. ${EndIf}
  69. ${If} $dshOldMoved == "1"
  70. ClearErrors
  71. Rename $dshOldDirectory $dshFinalDirectory
  72. ${If} ${Errors}
  73. ; Leave the complete backup in place if another process prevents restoration.
  74. DetailPrint $dshOldDirectory
  75. Return
  76. ${EndIf}
  77. StrCpy $dshOldMoved ""
  78. ${EndIf}
  79. ${If} $dshNewDirectory != ""
  80. RMDir /r "\\?\$dshNewDirectory"
  81. ${EndIf}
  82. StrCpy $INSTDIR $dshFinalDirectory
  83. FunctionEnd
  84. Function dshPromoteDirectories
  85. !ifmacrodef InstallerPublishStage
  86. !insertmacro InstallerPublishStage 2
  87. !endif
  88. ; SetOutPath opens a directory handle; release it before either rename.
  89. SetOutPath $PLUGINSDIR
  90. ClearErrors
  91. ${If} ${FileExists} "$dshFinalDirectory\*.*"
  92. Rename $dshFinalDirectory $dshOldDirectory
  93. ${If} ${Errors}
  94. Call dshRollbackDirectories
  95. SetErrors
  96. Return
  97. ${EndIf}
  98. StrCpy $dshOldMoved "1"
  99. ${Else}
  100. ; NSIS can create the destination before the install section starts.
  101. RMDir $dshFinalDirectory
  102. ${EndIf}
  103. ClearErrors
  104. Rename $dshNewDirectory $dshFinalDirectory
  105. ${If} ${Errors}
  106. Call dshRollbackDirectories
  107. SetErrors
  108. Return
  109. ${EndIf}
  110. StrCpy $dshNewMoved "1"
  111. SetOutPath $dshFinalDirectory
  112. !ifmacrodef InstallerPublishStage
  113. !insertmacro InstallerPublishStage 3
  114. !endif
  115. ClearErrors
  116. FunctionEnd
  117. !macro dshFinishDirectories
  118. StrCpy $dshNewMoved ""
  119. ${If} $dshOldMoved == "1"
  120. RMDir /r "\\?\$dshOldDirectory"
  121. StrCpy $dshOldMoved ""
  122. ${EndIf}
  123. !macroend