CBICA / CaPTk2.0

Other
5 stars 5 forks source link

NSIS scripts does not run #6

Closed dboun closed 4 years ago

dboun commented 4 years ago
# Run command: "C:/Program Files (x86)/NSIS/makensis.exe" "C:/MITK-superbuild/MITK-build/_CPack_Packages/win64/NSIS/project.nsi"
# Output:
Processing config: C:\Program Files (x86)\NSIS\nsisconf.nsh

Processing script file: "C:/MITK-superbuild/MITK-build/_CPack_Packages/win64/NSIS/project.nsi" (ACP)

!macro: macro named "RemoveSection" already exists!

Error in script "C:/MITK-superbuild/MITK-build/_CPack_Packages/win64/NSIS/project.nsi" on line 127 -- aborting creation process

Fix inspired from here (full changes in the end):

Sample final project.nsi for src dir "C:/MITK-v2018.04.2-src" and build dir "C:/MITK-superbuild" and certain names for all modules, plugins, and applications

; CPack install script designed for a nmake build

;--------------------------------
; You must define these values

  !define VERSION "NO TAG FOUND"
  !define PATCH  "2"
  !define INST_DIR "C:/MITK-superbuild/MITK-build/_CPack_Packages/win64/NSIS/MITK-NO TAG FOUND-windows-x86_64"

;--------------------------------
;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
  Var INSTALL_DESKTOP
  Var IS_DEFAULT_INSTALLDIR
;--------------------------------
;Include Modern UI

  !include "MUI.nsh"

  ;Default installation folder
  InstallDir "$PROGRAMFILES64\MITK NO TAG FOUND"

  ;Allow for very long title on the welcome page
  !define MUI_WELCOMEPAGE_TITLE_3LINES

;--------------------------------
;General

  ;Name and file
  Name "MITK NO TAG FOUND"
  OutFile "C:/MITK-superbuild/MITK-build/_CPack_Packages/win64/NSIS/MITK-NO TAG FOUND-windows-x86_64.exe"

  ;Set compression
  SetCompressor lzma

  RequestExecutionLevel user

  !include Sections.nsh

;--- Component support macros: ---
; The code for the add/remove functionality is from:
;   http://nsis.sourceforge.net/Add/Remove_Functionality
; It has been modified slightly and extended to provide
; inter-component dependencies.
Var AR_SecFlags
Var AR_RegFlags

; Loads the "selected" flag for the section named SecName into the
; variable VarName.
!macro LoadSectionSelectedIntoVar SecName VarName
 SectionGetFlags ${${SecName}} $${VarName}
 IntOp $${VarName} $${VarName} & ${SF_SELECTED}  ;Turn off all other bits
!macroend

; Loads the value of a variable... can we get around this?
!macro LoadVar VarName
  IntOp $R0 0 + $${VarName}
!macroend

; Sets the value of a variable
!macro StoreVar VarName IntValue
  IntOp $${VarName} 0 + ${IntValue}
!macroend

!macro InitSection SecName
  ;  This macro reads component installed flag from the registry and
  ;changes checked state of the section on the components page.
  ;Input: section index constant name specified in Section command.

  ClearErrors
  ;Reading component status from registry
  ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MITK\Components\${SecName}" "Installed"
  IfErrors "default_${SecName}"
    ;Status will stay default if registry value not found
    ;(component was never installed)
  IntOp $AR_RegFlags $AR_RegFlags & ${SF_SELECTED} ;Turn off all other bits
  SectionGetFlags ${${SecName}} $AR_SecFlags  ;Reading default section flags
  IntOp $AR_SecFlags $AR_SecFlags & 0xFFFE  ;Turn lowest (enabled) bit off
  IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags      ;Change lowest bit

  ; Note whether this component was installed before
  !insertmacro StoreVar ${SecName}_was_installed $AR_RegFlags
  IntOp $R0 $AR_RegFlags & $AR_RegFlags

  ;Writing modified flags
  SectionSetFlags ${${SecName}} $AR_SecFlags

 "default_${SecName}:"
 !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected
!macroend

!macro FinishSection SecName
  ;  This macro reads section flag set by user and removes the section
  ;if it is not selected.
  ;Then it writes component installed flag to registry
  ;Input: section index constant name specified in Section command.

  SectionGetFlags ${${SecName}} $AR_SecFlags  ;Reading section flags
  ;Checking lowest bit:
  IntOp $AR_SecFlags $AR_SecFlags & ${SF_SELECTED}
  IntCmp $AR_SecFlags 1 "leave_${SecName}"
    ;Section is not selected:
    ;Calling Section uninstall macro and writing zero installed flag
    !insertmacro "Remove_${${SecName}}"
    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MITK\Components\${SecName}" \
  "Installed" 0
    Goto "exit_${SecName}"

 "leave_${SecName}:"
    ;Section is selected:
    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MITK\Components\${SecName}" \
  "Installed" 1

 "exit_${SecName}:"
!macroend

!macro RemoveSection_CPack SecName
  ;  This macro is used to call section's Remove_... macro
  ;from the uninstaller.
  ;Input: section index constant name specified in Section command.

  !insertmacro "Remove_${${SecName}}"
!macroend

; NSIS example code to only include some code if a file exists at compile time (whereas IfFileExists works at runtime)
; See http://nsis.sourceforge.net/Check_if_a_file_exists_at_compile_time for documentation
!macro !defineifexist_CPack _VAR_NAME _FILE_NAME
  !tempfile _TEMPFILE
  !system 'if exist "${_FILE_NAME}" echo !define ${_VAR_NAME} > "${_TEMPFILE}"'
  !include '${_TEMPFILE}'
  !delfile '${_TEMPFILE}'
  !undef _TEMPFILE
!macroend
!define !defineifexist_CPack "!insertmacro !defineifexist_CPack"

; Determine whether the selection of SecName changed
!macro MaybeSelectionChanged SecName
  !insertmacro LoadVar ${SecName}_selected
  SectionGetFlags ${${SecName}} $R1
  IntOp $R1 $R1 & ${SF_SELECTED} ;Turn off all other bits

  ; See if the status has changed:
  IntCmp $R0 $R1 "${SecName}_unchanged"
  !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected

  IntCmp $R1 ${SF_SELECTED} "${SecName}_was_selected"
  !insertmacro "Deselect_required_by_${SecName}"
  goto "${SecName}_unchanged"

  "${SecName}_was_selected:"
  !insertmacro "Select_${SecName}_depends"

  "${SecName}_unchanged:"
!macroend
;--- End of Add/Remove macros ---

;--------------------------------
;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"'

!ifndef WriteEnvStr_RegKey
  !ifdef ALL_USERS
    !define WriteEnvStr_RegKey \
       'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
  !else
    !define WriteEnvStr_RegKey 'HKCU "Environment"'
  !endif
!endif

; 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
  Push $3

  # don't add if the path doesn't exist
  IfFileExists "$0\*.*" "" AddToPath_done

  ReadEnvStr $1 PATH
  ; if the path is too long for a NSIS variable NSIS will return a 0
  ; length string.  If we find that, then warn and skip any path
  ; modification as it will trash the existing path.
  StrLen $2 $1
  IntCmp $2 0 CheckPathLength_ShowPathWarning CheckPathLength_Done CheckPathLength_Done
    CheckPathLength_ShowPathWarning:
    DetailPrint "Warning: Could not modify PATH variable - current PATH is too long.\n\
This does not impact the functionality of MITK itself, but you will not be able to start\
it from anywhere via command line."
    ; The message box is probably too much of an escalation, most users won't care or notice
    ;Messagebox MB_OK|MB_ICONEXCLAMATION "Warning! PATH too long installer unable to modify PATH!"
    Goto AddToPath_done
  CheckPathLength_Done:
  Push "$1;"
  Push "$0;"
  Call StrStr
  Pop $2
  StrCmp $2 "" "" AddToPath_done
  Push "$1;"
  Push "$0\;"
  Call StrStr
  Pop $2
  StrCmp $2 "" "" AddToPath_done
  GetFullPathName /SHORT $3 $0
  Push "$1;"
  Push "$3;"
  Call StrStr
  Pop $2
  StrCmp $2 "" "" AddToPath_done
  Push "$1;"
  Push "$3\;"
  Call StrStr
  Pop $2
  StrCmp $2 "" "" AddToPath_done

  Call IsNT
  Pop $1
  StrCmp $1 1 AddToPath_NT
    ; Not on NT
    StrCpy $1 $WINDIR 2
    FileOpen $1 "$1\autoexec.bat" a
    FileSeek $1 -1 END
    FileReadByte $1 $2
    IntCmp $2 26 0 +2 +2 # DOS EOF
      FileSeek $1 -1 END # write over EOF
    FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n"
    FileClose $1
    SetRebootFlag true
    Goto AddToPath_done

  AddToPath_NT:
    StrCmp $ADD_TO_PATH_ALL_USERS "1" ReadAllKey
      ReadRegStr $1 ${NT_current_env} "PATH"
      Goto DoTrim
    ReadAllKey:
      ReadRegStr $1 ${NT_all_env} "PATH"
    DoTrim:
    StrCmp $1 "" AddToPath_NTdoIt
      Push $1
      Call Trim
      Pop $1
      StrCpy $0 "$1;$0"
    AddToPath_NTdoIt:
      StrCmp $ADD_TO_PATH_ALL_USERS "1" WriteAllKey
        WriteRegExpandStr ${NT_current_env} "PATH" $0
        Goto DoSend
      WriteAllKey:
        WriteRegExpandStr ${NT_all_env} "PATH" $0
      DoSend:
      SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000

  AddToPath_done:
    Pop $3
    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
  Push $5
  Push $6

  IntFmt $6 "%c" 26 # DOS EOF

  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"
    Goto unRemoveFromPath_dosLoop

    unRemoveFromPath_dosLoop:
      FileRead $1 $3
      StrCpy $5 $3 1 -1 # read last char
      StrCmp $5 $6 0 +2 # if DOS EOF
        StrCpy $3 $3 -1 # remove DOS EOF so we can compare
      StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine
      StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine
      StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine
      StrCmp $3 "" unRemoveFromPath_dosLoopEnd
      FileWrite $2 $3
      Goto unRemoveFromPath_dosLoop
      unRemoveFromPath_dosLoopRemoveLine:
        SetRebootFlag true
        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:
    StrCmp $ADD_TO_PATH_ALL_USERS "1" unReadAllKey
      ReadRegStr $1 ${NT_current_env} "PATH"
      Goto unDoTrim
    unReadAllKey:
      ReadRegStr $1 ${NT_all_env} "PATH"
    unDoTrim:
    StrCpy $5 $1 1 -1 # copy last char
    StrCmp $5 ";" +2 # if last char != ;
      StrCpy $1 "$1;" # append ;
    Push $1
    Push "$0;"
    Call un.StrStr ; Find `$0;` in $1
    Pop $2 ; pos of our dir
    StrCmp $2 "" unRemoveFromPath_done
      ; else, it is in path
      # $0 - path to add
      # $1 - path var
      StrLen $3 "$0;"
      StrLen $4 $2
      StrCpy $5 $1 -$4 # $5 is now the part before the path to remove
      StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove
      StrCpy $3 $5$6

      StrCpy $5 $3 1 -1 # copy last char
      StrCmp $5 ";" 0 +2 # if last char == ;
        StrCpy $3 $3 -1 # remove last char

      StrCmp $ADD_TO_PATH_ALL_USERS "1" unWriteAllKey
        WriteRegExpandStr ${NT_current_env} "PATH" $3
        Goto unDoSend
      unWriteAllKey:
        WriteRegExpandStr ${NT_all_env} "PATH" $3
      unDoSend:
      SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000

  unRemoveFromPath_done:
    Pop $6
    Pop $5
    Pop $4
    Pop $3
    Pop $2
    Pop $1
    Pop $0
FunctionEnd

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Uninstall stuff
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

###########################################
#            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 Trim ; Added by Pelaca
  Exch $R1
  Push $R2
Loop:
  StrCpy $R2 "$R1" 1 -1
  StrCmp "$R2" " " RTrim
  StrCmp "$R2" "$\n" RTrim
  StrCmp "$R2" "$\r" RTrim
  StrCmp "$R2" ";" RTrim
  GoTo Done
RTrim:
  StrCpy $R1 "$R1" -1
  Goto Loop
Done:
  Pop $R2
  Exch $R1
FunctionEnd

Function ConditionalAddToRegisty
  Pop $0
  Pop $1
  StrCmp "$0" "" ConditionalAddToRegisty_EmptyString
    WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\MITK" \
    "$1" "$0"
    ;MessageBox MB_OK "Set Registry: '$1' to '$0'"
    DetailPrint "Set install registry entry: '$1' to '$0'"
  ConditionalAddToRegisty_EmptyString:
FunctionEnd

;--------------------------------

!ifdef CPACK_USES_DOWNLOAD
Function DownloadFile
    IfFileExists $INSTDIR\* +2
    CreateDirectory $INSTDIR
    Pop $0

    ; Skip if already downloaded
    IfFileExists $INSTDIR\$0 0 +2
    Return

    StrCpy $1 ""

  try_again:
    NSISdl::download "$1/$0" "$INSTDIR\$0"

    Pop $1
    StrCmp $1 "success" success
    StrCmp $1 "Cancelled" cancel
    MessageBox MB_OK "Download failed: $1"
  cancel:
    Return
  success:
FunctionEnd
!endif

;--------------------------------
; Installation types

;--------------------------------
; Component sections

;--------------------------------
; Define some macro setting for the gui
!define MUI_ICON "C:/MITK-v2018.04.2-src\mitk.ico"
!define MUI_UNICON "C:/MITK-v2018.04.2-src\mitk.ico"

!define MUI_HEADERIMAGE_BITMAP "C:/MITK-v2018.04.2-src\mitk.bmp"

;--------------------------------
;Pages
  !insertmacro MUI_PAGE_WELCOME

  !insertmacro MUI_PAGE_LICENSE "C:/MITK-v2018.04.2-src/LICENSE.txt"
  Page custom InstallOptionsPage
  !insertmacro MUI_PAGE_DIRECTORY

  ;Start Menu Folder Page Configuration
  !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX"
  !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\German Cancer Research Center (DKFZ)\MITK NO TAG FOUND"
  !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" ;first language is the default language
  !insertmacro MUI_LANGUAGE "Albanian"
  !insertmacro MUI_LANGUAGE "Arabic"
  !insertmacro MUI_LANGUAGE "Basque"
  !insertmacro MUI_LANGUAGE "Belarusian"
  !insertmacro MUI_LANGUAGE "Bosnian"
  !insertmacro MUI_LANGUAGE "Breton"
  !insertmacro MUI_LANGUAGE "Bulgarian"
  !insertmacro MUI_LANGUAGE "Croatian"
  !insertmacro MUI_LANGUAGE "Czech"
  !insertmacro MUI_LANGUAGE "Danish"
  !insertmacro MUI_LANGUAGE "Dutch"
  !insertmacro MUI_LANGUAGE "Estonian"
  !insertmacro MUI_LANGUAGE "Farsi"
  !insertmacro MUI_LANGUAGE "Finnish"
  !insertmacro MUI_LANGUAGE "French"
  !insertmacro MUI_LANGUAGE "German"
  !insertmacro MUI_LANGUAGE "Greek"
  !insertmacro MUI_LANGUAGE "Hebrew"
  !insertmacro MUI_LANGUAGE "Hungarian"
  !insertmacro MUI_LANGUAGE "Icelandic"
  !insertmacro MUI_LANGUAGE "Indonesian"
  !insertmacro MUI_LANGUAGE "Irish"
  !insertmacro MUI_LANGUAGE "Italian"
  !insertmacro MUI_LANGUAGE "Japanese"
  !insertmacro MUI_LANGUAGE "Korean"
  !insertmacro MUI_LANGUAGE "Kurdish"
  !insertmacro MUI_LANGUAGE "Latvian"
  !insertmacro MUI_LANGUAGE "Lithuanian"
  !insertmacro MUI_LANGUAGE "Luxembourgish"
  !insertmacro MUI_LANGUAGE "Macedonian"
  !insertmacro MUI_LANGUAGE "Malay"
  !insertmacro MUI_LANGUAGE "Mongolian"
  !insertmacro MUI_LANGUAGE "Norwegian"
  !insertmacro MUI_LANGUAGE "Polish"
  !insertmacro MUI_LANGUAGE "Portuguese"
  !insertmacro MUI_LANGUAGE "PortugueseBR"
  !insertmacro MUI_LANGUAGE "Romanian"
  !insertmacro MUI_LANGUAGE "Russian"
  !insertmacro MUI_LANGUAGE "Serbian"
  !insertmacro MUI_LANGUAGE "SerbianLatin"
  !insertmacro MUI_LANGUAGE "SimpChinese"
  !insertmacro MUI_LANGUAGE "Slovak"
  !insertmacro MUI_LANGUAGE "Slovenian"
  !insertmacro MUI_LANGUAGE "Spanish"
  !insertmacro MUI_LANGUAGE "Swedish"
  !insertmacro MUI_LANGUAGE "Thai"
  !insertmacro MUI_LANGUAGE "TradChinese"
  !insertmacro MUI_LANGUAGE "Turkish"
  !insertmacro MUI_LANGUAGE "Ukrainian"
  !insertmacro MUI_LANGUAGE "Welsh"

;--------------------------------
;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 "-Core installation"
  ;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}\*.*"

  ; Check whether redistributables need to be installed
  Call RedistributablePage

  ;Store installation folder
  WriteRegStr SHCTX "Software\German Cancer Research Center (DKFZ)\MITK NO TAG FOUND" "" $INSTDIR

  ;Create uninstaller
  WriteUninstaller "$INSTDIR\Uninstall.exe"
  Push "DisplayName"
  Push "MITK - Medical Imaging and Interaction Toolkit"
  Call ConditionalAddToRegisty
  Push "DisplayVersion"
  Push "NO TAG FOUND"
  Call ConditionalAddToRegisty
  Push "Publisher"
  Push "German Cancer Research Center (DKFZ)"
  Call ConditionalAddToRegisty
  Push "UninstallString"
  Push "$INSTDIR\Uninstall.exe"
  Call ConditionalAddToRegisty
  Push "NoRepair"
  Push "1"
  Call ConditionalAddToRegisty

  !ifdef CPACK_NSIS_ADD_REMOVE
  ;Create add/remove functionality
  Push "ModifyPath"
  Push "$INSTDIR\AddRemove.exe"
  Call ConditionalAddToRegisty
  !else
  Push "NoModify"
  Push "1"
  Call ConditionalAddToRegisty
  !endif

  ; Optional registration
  Push "DisplayIcon"
  Push "$INSTDIR\bin\\mitk.ico"
  Call ConditionalAddToRegisty
  Push "HelpLink"
  Push "http:\\www.mitk.org"
  Call ConditionalAddToRegisty
  Push "URLInfoAbout"
  Push "http:\\www.mitk.org"
  Call ConditionalAddToRegisty
  Push "Contact"
  Push "mitk@mitk.org"
  Call ConditionalAddToRegisty
  !insertmacro MUI_INSTALLOPTIONS_READ $INSTALL_DESKTOP "NSIS.InstallOptions.ini" "Field 5" "State"
  !insertmacro MUI_STARTMENU_WRITE_BEGIN Application

  ;Create shortcuts
  CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\MITK Workbench.lnk" "$INSTDIR\bin\MitkWorkbench.exe"
  WriteINIStr "$SMPROGRAMS\$STARTMENU_FOLDER\MITK Web Site.url" "InternetShortcut" "URL" "http://www.mitk.org"

  CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe"

  ;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"

  ; 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
  Push "InstallToDesktop"
  Push "$INSTALL_DESKTOP"
  Call ConditionalAddToRegisty

  !insertmacro MUI_STARTMENU_WRITE_END

SectionEnd

Section "-Add to path"
  Push $INSTDIR\bin
  StrCmp "ON" "ON" 0 doNotAddToPath
  StrCmp $DO_NOT_ADD_TO_PATH "1" doNotAddToPath 0
    Call AddToPath
  doNotAddToPath:
SectionEnd

;--------------------------------
; Create custom pages
Function InstallOptionsPage
  !insertmacro MUI_HEADER_TEXT "Install Options" "Choose options for installing MITK NO TAG FOUND"
  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini"

FunctionEnd

; Author: Lilla (lilla@earthlink.net) 2003-06-13
; function IsUserAdmin uses plugin \NSIS\PlusgIns\UserInfo.dll
; This function is based upon code in \NSIS\Contrib\UserInfo\UserInfo.nsi
; This function was tested under NSIS 2 beta 4 (latest CVS as of this writing).
;
; Usage:
;   Call IsUserAdmin
;   Pop $R0   ; at this point $R0 is "true" or "false"
;
Function IsUserAdmin
Push $R0
Push $R1
Push $R2

ClearErrors
UserInfo::GetName
IfErrors Win9x
Pop $R1
UserInfo::GetAccountType
Pop $R2

StrCmp $R2 "Admin" 0 Continue
; Observation: I get here when running Win98SE. (Lilla)
; The functions UserInfo.dll looks for are there on Win98 too,
; but just don't work. So UserInfo.dll, knowing that admin isn't required
; on Win98, returns admin anyway. (per kichik)
; MessageBox MB_OK 'User "$R1" is in the Administrators group'
StrCpy $R0 "true"
Goto Done

Continue:
; You should still check for an empty string because the functions
; UserInfo.dll looks for may not be present on Windows 95. (per kichik)
StrCmp $R2 "" Win9x
StrCpy $R0 "false"
;MessageBox MB_OK 'User "$R1" is in the "$R2" group'
Goto Done

Win9x:
; comment/message below is by UserInfo.nsi author:
; This one means you don't need to care about admin or
; not admin because Windows 9x doesn't either
;MessageBox MB_OK "Error! This DLL can't run under Windows 9x!"
StrCpy $R0 "true"

Done:
;MessageBox MB_OK 'User= "$R1"  AccountType= "$R2"  IsUserAdmin= "$R0"'

Pop $R2
Pop $R1
Exch $R0
FunctionEnd

Function RedistributablePage
  ; Check whether the appropriate redistributable for this installer has been installed
  StrCmp 'x64' 'x64' 0 +3
    SetRegView 64
    Goto done
  StrCmp 'x64' 'x86' 0 +3
    SetRegView 32
    Goto done
  ; The following line should not be reached, use for debugging
  ; MessageBox MB_OK "Could not determine x86/x64 architecture during CPack installer configuration."
  done:
  ReadRegDword $1 HKLM "SOFTWARE\Microsoft\DevDiv\vc\Servicing\14.0\RuntimeMinimum" "Install"

  ; If installed show installed, else offer installation
  StrCmp $1 1 RedistInstalled

  ; Offer Installation
  ; MessageBox MB_YESNO "MITK requires the Visual Studio 2017 Redistributable to function. Do you wish to install it?" /SD IDYES IDNO endInstallationMissingRedist

  ; Verify that user has admin privileges
  ; Otherwise they are not able to install the redistributable
  Call IsUserAdmin
  Exch $R0
  StrCmp $R0 "false" NoAdminRights
  Pop $R0

  SetOutPath $INSTDIR\thirdpartyinstallers

  ; We need compile time information on whether the redistributable installer exists.
  ; If it does not exist using the "File" command will lead to errors.
  ${!defineifexist_CPack} REDIST_INSTALLER_PRESENT "MITK-NO TAG FOUND-windows-x86_64\thirdpartyinstallers\vc_redist.x64.exe"

  !ifdef REDIST_INSTALLER_PRESENT
    ; Check at runtime whether the redistributable installer is available
    IfFileExists $INSTDIR\thirdpartyinstallers\vc_redist.x64.exe InstallRedist NoRedistInstaller

    InstallRedist:

    ClearErrors
    File "MITK-NO TAG FOUND-windows-x86_64\thirdpartyinstallers\vc_redist.x64.exe"
    ExecWait '"$INSTDIR\thirdpartyinstallers\vc_redist.x64.exe" /passive /norestart'
    IfErrors endInstallationMissingRedist

    Goto RedistInstalled

    endInstallationMissingRedist:
    Abort "Installation aborted. Missing required Visual Studio 2017 x64 Redistributable"
  !endif

  ; We are missing the redistributable installer, inform the user
  NoRedistInstaller:
  MessageBox MB_OK "Missing required Visual Studio 2017 x64 Redistributable. You need to install it to use MITK."
  Goto End

  ; The user does not have the required rights to install redistributables
  NoAdminRights:
  MessageBox MB_OK|MB_ICONSTOP "This MITK version requires the Visual Studio 2017 x64 Redistributable.$\r$\n\
                    Your user account does not have administrator privileges.$\r$\n\
                    Please ask your system administrator to install the Visual Studio 2017 x64 Redistributable."
  Pop $R0
  Goto End

  ; No need to do anything
  RedistInstalled:
  Goto End

  End:
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

;--- Add/Remove callback functions: ---
!macro SectionList MacroName
  ;This macro used to perform operation on multiple sections.
  ;List all of your components in following manner here.

!macroend

Section -FinishComponents
  ;Removes unselected components and writes component status to registry
  !insertmacro SectionList "FinishSection"

!ifdef CPACK_NSIS_ADD_REMOVE
  ; Get the name of the installer executable
  System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1'
  StrCpy $R3 $R0

  ; Strip off the last 13 characters, to see if we have AddRemove.exe
  StrLen $R1 $R0
  IntOp $R1 $R0 - 13
  StrCpy $R2 $R0 13 $R1
  StrCmp $R2 "AddRemove.exe" addremove_installed

  ; We're not running AddRemove.exe, so install it
  CopyFiles $R3 $INSTDIR\AddRemove.exe

  addremove_installed:
!endif
SectionEnd
;--- End of Add/Remove callback functions ---

;--------------------------------
; Component dependencies
Function .onSelChange
  !insertmacro SectionList MaybeSelectionChanged
FunctionEnd

;--------------------------------
;Uninstaller Section

Section "Uninstall"
  ReadRegStr $START_MENU SHCTX \
   "Software\Microsoft\Windows\CurrentVersion\Uninstall\MITK" "StartMenu"
  ;MessageBox MB_OK "Start menu is in: $START_MENU"
  ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \
    "Software\Microsoft\Windows\CurrentVersion\Uninstall\MITK" "DoNotAddToPath"
  ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \
    "Software\Microsoft\Windows\CurrentVersion\Uninstall\MITK" "AddToPathAllUsers"
  ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \
    "Software\Microsoft\Windows\CurrentVersion\Uninstall\MITK" "AddToPathCurrentUser"
  ;MessageBox MB_OK "Add to path: $DO_NOT_ADD_TO_PATH all users: $ADD_TO_PATH_ALL_USERS"
  ReadRegStr $INSTALL_DESKTOP SHCTX \
    "Software\Microsoft\Windows\CurrentVersion\Uninstall\MITK" "InstallToDesktop"
  ;MessageBox MB_OK "Install to desktop: $INSTALL_DESKTOP "

  ;Remove files we installed.
  ;Keep the list of directories here in sync with the File commands above.
  Delete "$INSTDIR\bin"
  Delete "$INSTDIR\bin\ann.dll"
  Delete "$INSTDIR\bin\concrt140.dll"
  Delete "$INSTDIR\bin\CppMicroServices.dll"
  Delete "$INSTDIR\bin\CTKCore.dll"
  Delete "$INSTDIR\bin\CTKDICOMCore.dll"
  Delete "$INSTDIR\bin\CTKDICOMWidgets.dll"
  Delete "$INSTDIR\bin\CTKPluginFramework.dll"
  Delete "$INSTDIR\bin\CTKWidgets.dll"
  Delete "$INSTDIR\bin\dcmdata.dll"
  Delete "$INSTDIR\bin\dcmfg.dll"
  Delete "$INSTDIR\bin\dcmimage.dll"
  Delete "$INSTDIR\bin\dcmimgle.dll"
  Delete "$INSTDIR\bin\dcmiod.dll"
  Delete "$INSTDIR\bin\dcmjpeg.dll"
  Delete "$INSTDIR\bin\dcmnet.dll"
  Delete "$INSTDIR\bin\dcmrt.dll"
  Delete "$INSTDIR\bin\dcmseg.dll"
  Delete "$INSTDIR\bin\dcmtls.dll"
  Delete "$INSTDIR\bin\gdcmcharls.dll"
  Delete "$INSTDIR\bin\gdcmCommon.dll"
  Delete "$INSTDIR\bin\gdcmDICT.dll"
  Delete "$INSTDIR\bin\gdcmDSED.dll"
  Delete "$INSTDIR\bin\gdcmexpat.dll"
  Delete "$INSTDIR\bin\gdcmIOD.dll"
  Delete "$INSTDIR\bin\gdcmjpeg12.dll"
  Delete "$INSTDIR\bin\gdcmjpeg16.dll"
  Delete "$INSTDIR\bin\gdcmjpeg8.dll"
  Delete "$INSTDIR\bin\gdcmMSFF.dll"
  Delete "$INSTDIR\bin\gdcmopenjpeg.dll"
  Delete "$INSTDIR\bin\gdcmzlib.dll"
  Delete "$INSTDIR\bin\ijg12.dll"
  Delete "$INSTDIR\bin\ijg16.dll"
  Delete "$INSTDIR\bin\ijg8.dll"
  Delete "$INSTDIR\bin\ITKCommon-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOBioRad-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOBMP-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOBruker-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOGDCM-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOGE-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOGIPL-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOHDF5-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOImageBase-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOIPL-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOJPEG-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOLSM-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOMeta-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOMINC-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOMRC-4.13.dll"
  Delete "$INSTDIR\bin\ITKIONIFTI-4.13.dll"
  Delete "$INSTDIR\bin\ITKIONRRD-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOPNG-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOStimulate-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOTIFF-4.13.dll"
  Delete "$INSTDIR\bin\ITKIOVTK-4.13.dll"
  Delete "$INSTDIR\bin\ITKLabelMap-4.13.dll"
  Delete "$INSTDIR\bin\ITKOptimizers-4.13.dll"
  Delete "$INSTDIR\bin\ITKOptimizersv4-4.13.dll"
  Delete "$INSTDIR\bin\ITKQuadEdgeMesh-4.13.dll"
  Delete "$INSTDIR\bin\ITKStatistics-4.13.dll"
  Delete "$INSTDIR\bin\ITKTransform-4.13.dll"
  Delete "$INSTDIR\bin\ITKVTK-4.13.dll"
  Delete "$INSTDIR\bin\ITKWatersheds-4.13.dll"
  Delete "$INSTDIR\bin\MAPAlgorithms-0.13.dll"
  Delete "$INSTDIR\bin\MAPAlgorithmsFSL-0.13.dll"
  Delete "$INSTDIR\bin\MAPAlgorithmsITK-0.13.dll"
  Delete "$INSTDIR\bin\MAPAlgorithmsPlastimatch-0.13.dll"
  Delete "$INSTDIR\bin\MAPCore-0.13.dll"
  Delete "$INSTDIR\bin\MAPDeployment-0.13.dll"
  Delete "$INSTDIR\bin\MAPIO-0.13.dll"
  Delete "$INSTDIR\bin\MAPUtilities-0.13.dll"
  Delete "$INSTDIR\bin\mbilog.dll"
  Delete "$INSTDIR\bin\mdra-0-13_MITK_FastSymmetricForcesDemons_MultiRes_default.dll"
  Delete "$INSTDIR\bin\mdra-0-13_MITK_FastSymmetricForcesDemons_MultiRes_default.lib"
  Delete "$INSTDIR\bin\mdra-0-13_MITK_LevelSetMotion_MultiRes_default.dll"
  Delete "$INSTDIR\bin\mdra-0-13_MITK_LevelSetMotion_MultiRes_default.lib"
  Delete "$INSTDIR\bin\mdra-0-13_MITK_MultiModal_affine_default.dll"
  Delete "$INSTDIR\bin\mdra-0-13_MITK_MultiModal_affine_default.lib"
  Delete "$INSTDIR\bin\mdra-0-13_MITK_MultiModal_rigid_default.dll"
  Delete "$INSTDIR\bin\mdra-0-13_MITK_MultiModal_rigid_default.lib"
  Delete "$INSTDIR\bin\mdra-0-13_MITK_MultiModal_translation_default.dll"
  Delete "$INSTDIR\bin\mdra-0-13_MITK_MultiModal_translation_default.lib"
  Delete "$INSTDIR\bin\mdra-0-13_MITK_Rigid_closedform_points_default.dll"
  Delete "$INSTDIR\bin\mdra-0-13_MITK_Rigid_closedform_points_default.lib"
  Delete "$INSTDIR\bin\mdra-0-13_MITK_Rigid_ICP_default.dll"
  Delete "$INSTDIR\bin\mdra-0-13_MITK_Rigid_ICP_default.lib"
  Delete "$INSTDIR\bin\mitk.bmp"
  Delete "$INSTDIR\bin\mitk.ico"
  Delete "$INSTDIR\bin\MitkAlgorithmsExt.dll"
  Delete "$INSTDIR\bin\MitkAnnotation.dll"
  Delete "$INSTDIR\bin\MitkAppUtil.dll"
  Delete "$INSTDIR\bin\MitkBoundingShape.dll"
  Delete "$INSTDIR\bin\MitkCaptkApp.exe"
  Delete "$INSTDIR\bin\MitkCaptkApp.provisioning"
  Delete "$INSTDIR\bin\MitkCaPTkInteractiveSegmentationModule.dll"
  Delete "$INSTDIR\bin\MitkCEST.dll"
  Delete "$INSTDIR\bin\MitkChart.dll"
  Delete "$INSTDIR\bin\MitkCommandLine.dll"
  Delete "$INSTDIR\bin\MitkContourModel.dll"
  Delete "$INSTDIR\bin\MitkCore"
  Delete "$INSTDIR\bin\MitkCore\MitkCESTIO.dll"
  Delete "$INSTDIR\bin\MitkCore\MitkDICOMQIIO.dll"
  Delete "$INSTDIR\bin\MitkCore\MitkDICOMReaderServices.dll"
  Delete "$INSTDIR\bin\MitkCore\MitkDicomRTIO.dll"
  Delete "$INSTDIR\bin\MitkCore\MitkDiffusionCoreIO.dll"
  Delete "$INSTDIR\bin\MitkCore\MitkIGTIO.dll"
  Delete "$INSTDIR\bin\MitkCore\MitkIOExt.dll"
  Delete "$INSTDIR\bin\MitkCore\MitkIpPicSupportIO.dll"
  Delete "$INSTDIR\bin\MitkCore\MitkMatchPointRegistrationIO.dll"
  Delete "$INSTDIR\bin\MitkCore\MitkMultilabelIO.dll"
  Delete "$INSTDIR\bin\MitkCore.dll"
  Delete "$INSTDIR\bin\MitkDataTypesExt.dll"
  Delete "$INSTDIR\bin\MitkDICOMReader.dll"
  Delete "$INSTDIR\bin\MitkDicomRT.dll"
  Delete "$INSTDIR\bin\MitkDicomUI.dll"
  Delete "$INSTDIR\bin\MitkDiffusionCore.dll"
  Delete "$INSTDIR\bin\MitkExampleModule.dll"
  Delete "$INSTDIR\bin\MitkExtExampleCmdApp.exe"
  Delete "$INSTDIR\bin\MitkIGTBase.dll"
  Delete "$INSTDIR\bin\MitkImageExtraction.dll"
  Delete "$INSTDIR\bin\MitkImageStatistics.dll"
  Delete "$INSTDIR\bin\MitkLegacyGL.dll"
  Delete "$INSTDIR\bin\MitkLegacyIO.dll"
  Delete "$INSTDIR\bin\MitkMapperExt.dll"
  Delete "$INSTDIR\bin\MitkMatchPointRegistration.dll"
  Delete "$INSTDIR\bin\MitkMatchPointRegistrationUI.dll"
  Delete "$INSTDIR\bin\MitkMultilabel.dll"
  Delete "$INSTDIR\bin\MitkPlanarFigure.dll"
  Delete "$INSTDIR\bin\MitkQtWidgets.dll"
  Delete "$INSTDIR\bin\MitkQtWidgetsExt.dll"
  Delete "$INSTDIR\bin\MitkRTUI.dll"
  Delete "$INSTDIR\bin\MitkSceneSerialization.dll"
  Delete "$INSTDIR\bin\MitkSceneSerializationBase.dll"
  Delete "$INSTDIR\bin\MitkSegmentation.dll"
  Delete "$INSTDIR\bin\MitkSegmentationUI.dll"
  Delete "$INSTDIR\bin\MitkSurfaceInterpolation.dll"
  Delete "$INSTDIR\bin\msvcp140.dll"
  Delete "$INSTDIR\bin\oflog.dll"
  Delete "$INSTDIR\bin\ofstd.dll"
  Delete "$INSTDIR\bin\opencv_core341.dll"
  Delete "$INSTDIR\bin\opencv_ml341.dll"
  Delete "$INSTDIR\bin\plugins"
  Delete "$INSTDIR\bin\plugins\iconengines"
  Delete "$INSTDIR\bin\plugins\iconengines\qsvgicon.dll"
  Delete "$INSTDIR\bin\plugins\imageformats"
  Delete "$INSTDIR\bin\plugins\imageformats\qsvg.dll"
  Delete "$INSTDIR\bin\plugins\liborg_blueberry_core_commands.dll"
  Delete "$INSTDIR\bin\plugins\liborg_blueberry_core_expressions.dll"
  Delete "$INSTDIR\bin\plugins\liborg_blueberry_core_runtime.dll"
  Delete "$INSTDIR\bin\plugins\liborg_blueberry_ui_qt.dll"
  Delete "$INSTDIR\bin\plugins\liborg_blueberry_ui_qt_help.dll"
  Delete "$INSTDIR\bin\plugins\liborg_blueberry_ui_qt_log.dll"
  Delete "$INSTDIR\bin\plugins\liborg_commontk_configadmin.dll"
  Delete "$INSTDIR\bin\plugins\liborg_commontk_eventadmin.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_core_ext.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_core_services.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_exampleplugin_eageractivation.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_common.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_application.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_basicimageprocessing.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_captkapplication.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_captkinteractivesegmentation.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_common.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_common_legacy.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_coreapplication.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_datamanager.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_dicom.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_exampleplugin.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_ext.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_extapplication.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_imagecropper.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_imagenavigator.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_matchpoint_algorithm_batch.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_matchpoint_algorithm_browser.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_matchpoint_algorithm_control.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_matchpoint_evaluator.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_matchpoint_framereg.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_matchpoint_manipulator.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_matchpoint_mapper.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_matchpoint_visualizer.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_measurementtoolbox.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_moviemaker.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_multilabelsegmentation.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_preprocessing_resampling.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_properties.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_stdmultiwidgeteditor.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_gui_qt_viewnavigator.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_matchpoint_core_helper.dll"
  Delete "$INSTDIR\bin\plugins\liborg_mitk_planarfigure.dll"
  Delete "$INSTDIR\bin\plugins\platforms"
  Delete "$INSTDIR\bin\plugins\platforms\qwindows.dll"
  Delete "$INSTDIR\bin\plugins\sqldrivers"
  Delete "$INSTDIR\bin\plugins\sqldrivers\qsqlite.dll"
  Delete "$INSTDIR\bin\plugins\styles"
  Delete "$INSTDIR\bin\plugins\styles\qwindowsvistastyle.dll"
  Delete "$INSTDIR\bin\PocoFoundation.dll"
  Delete "$INSTDIR\bin\PocoJSON.dll"
  Delete "$INSTDIR\bin\PocoUtil.dll"
  Delete "$INSTDIR\bin\PocoXML.dll"
  Delete "$INSTDIR\bin\PocoZip.dll"
  Delete "$INSTDIR\bin\qt.conf"
  Delete "$INSTDIR\bin\Qt5Core.dll"
  Delete "$INSTDIR\bin\Qt5Gui.dll"
  Delete "$INSTDIR\bin\Qt5Help.dll"
  Delete "$INSTDIR\bin\Qt5Network.dll"
  Delete "$INSTDIR\bin\Qt5OpenGL.dll"
  Delete "$INSTDIR\bin\Qt5Positioning.dll"
  Delete "$INSTDIR\bin\Qt5PrintSupport.dll"
  Delete "$INSTDIR\bin\Qt5Qml.dll"
  Delete "$INSTDIR\bin\Qt5Quick.dll"
  Delete "$INSTDIR\bin\Qt5QuickWidgets.dll"
  Delete "$INSTDIR\bin\Qt5Sql.dll"
  Delete "$INSTDIR\bin\Qt5Svg.dll"
  Delete "$INSTDIR\bin\Qt5WebChannel.dll"
  Delete "$INSTDIR\bin\Qt5WebEngineCore.dll"
  Delete "$INSTDIR\bin\Qt5WebEngineWidgets.dll"
  Delete "$INSTDIR\bin\Qt5Widgets.dll"
  Delete "$INSTDIR\bin\Qt5Xml.dll"
  Delete "$INSTDIR\bin\QtWebEngineProcess.exe"
  Delete "$INSTDIR\bin\qwt.dll"
  Delete "$INSTDIR\bin\resources"
  Delete "$INSTDIR\bin\resources\icudtl.dat"
  Delete "$INSTDIR\bin\resources\qtwebengine_devtools_resources.pak"
  Delete "$INSTDIR\bin\resources\qtwebengine_resources.pak"
  Delete "$INSTDIR\bin\resources\qtwebengine_resources_100p.pak"
  Delete "$INSTDIR\bin\resources\qtwebengine_resources_200p.pak"
  Delete "$INSTDIR\bin\storescp.exe"
  Delete "$INSTDIR\bin\translations"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\am.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\ar.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\bg.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\bn.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\ca.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\cs.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\da.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\de.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\el.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\en-GB.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\en-US.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\es-419.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\es.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\et.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\fa.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\fi.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\fil.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\fr.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\gu.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\he.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\hi.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\hr.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\hu.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\id.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\it.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\ja.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\kn.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\ko.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\lt.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\lv.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\ml.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\mr.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\ms.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\nb.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\nl.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\pl.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\pt-BR.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\pt-PT.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\ro.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\ru.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\sk.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\sl.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\sr.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\sv.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\sw.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\ta.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\te.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\th.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\tr.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\uk.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\vi.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\zh-CN.pak"
  Delete "$INSTDIR\bin\translations\qtwebengine_locales\zh-TW.pak"
  Delete "$INSTDIR\bin\vcruntime140.dll"
  Delete "$INSTDIR\bin\vtkalglib-8.1.dll"
  Delete "$INSTDIR\bin\vtkCommonColor-8.1.dll"
  Delete "$INSTDIR\bin\vtkCommonComputationalGeometry-8.1.dll"
  Delete "$INSTDIR\bin\vtkCommonCore-8.1.dll"
  Delete "$INSTDIR\bin\vtkCommonDataModel-8.1.dll"
  Delete "$INSTDIR\bin\vtkCommonExecutionModel-8.1.dll"
  Delete "$INSTDIR\bin\vtkCommonMath-8.1.dll"
  Delete "$INSTDIR\bin\vtkCommonMisc-8.1.dll"
  Delete "$INSTDIR\bin\vtkCommonSystem-8.1.dll"
  Delete "$INSTDIR\bin\vtkCommonTransforms-8.1.dll"
  Delete "$INSTDIR\bin\vtkDICOMParser-8.1.dll"
  Delete "$INSTDIR\bin\vtkexpat-8.1.dll"
  Delete "$INSTDIR\bin\vtkFiltersCore-8.1.dll"
  Delete "$INSTDIR\bin\vtkFiltersExtraction-8.1.dll"
  Delete "$INSTDIR\bin\vtkFiltersGeneral-8.1.dll"
  Delete "$INSTDIR\bin\vtkFiltersGeometry-8.1.dll"
  Delete "$INSTDIR\bin\vtkFiltersHybrid-8.1.dll"
  Delete "$INSTDIR\bin\vtkFiltersModeling-8.1.dll"
  Delete "$INSTDIR\bin\vtkFiltersParallel-8.1.dll"
  Delete "$INSTDIR\bin\vtkFiltersProgrammable-8.1.dll"
  Delete "$INSTDIR\bin\vtkFiltersSources-8.1.dll"
  Delete "$INSTDIR\bin\vtkFiltersStatistics-8.1.dll"
  Delete "$INSTDIR\bin\vtkFiltersTexture-8.1.dll"
  Delete "$INSTDIR\bin\vtkfreetype-8.1.dll"
  Delete "$INSTDIR\bin\vtkgl2ps-8.1.dll"
  Delete "$INSTDIR\bin\vtkglew-8.1.dll"
  Delete "$INSTDIR\bin\vtkGUISupportQt-8.1.dll"
  Delete "$INSTDIR\bin\vtkImagingColor-8.1.dll"
  Delete "$INSTDIR\bin\vtkImagingCore-8.1.dll"
  Delete "$INSTDIR\bin\vtkImagingFourier-8.1.dll"
  Delete "$INSTDIR\bin\vtkImagingGeneral-8.1.dll"
  Delete "$INSTDIR\bin\vtkImagingHybrid-8.1.dll"
  Delete "$INSTDIR\bin\vtkImagingMath-8.1.dll"
  Delete "$INSTDIR\bin\vtkImagingSources-8.1.dll"
  Delete "$INSTDIR\bin\vtkImagingStencil-8.1.dll"
  Delete "$INSTDIR\bin\vtkInteractionStyle-8.1.dll"
  Delete "$INSTDIR\bin\vtkInteractionWidgets-8.1.dll"
  Delete "$INSTDIR\bin\vtkIOCore-8.1.dll"
  Delete "$INSTDIR\bin\vtkIOGeometry-8.1.dll"
  Delete "$INSTDIR\bin\vtkIOImage-8.1.dll"
  Delete "$INSTDIR\bin\vtkIOLegacy-8.1.dll"
  Delete "$INSTDIR\bin\vtkIOParallelXML-8.1.dll"
  Delete "$INSTDIR\bin\vtkIOPLY-8.1.dll"
  Delete "$INSTDIR\bin\vtkIOXML-8.1.dll"
  Delete "$INSTDIR\bin\vtkIOXMLParser-8.1.dll"
  Delete "$INSTDIR\bin\vtkjpeg-8.1.dll"
  Delete "$INSTDIR\bin\vtklz4-8.1.dll"
  Delete "$INSTDIR\bin\vtkmetaio-8.1.dll"
  Delete "$INSTDIR\bin\vtkParallelCore-8.1.dll"
  Delete "$INSTDIR\bin\vtkpng-8.1.dll"
  Delete "$INSTDIR\bin\vtkRenderingAnnotation-8.1.dll"
  Delete "$INSTDIR\bin\vtkRenderingContext2D-8.1.dll"
  Delete "$INSTDIR\bin\vtkRenderingContextOpenGL2-8.1.dll"
  Delete "$INSTDIR\bin\vtkRenderingCore-8.1.dll"
  Delete "$INSTDIR\bin\vtkRenderingFreeType-8.1.dll"
  Delete "$INSTDIR\bin\vtkRenderingGL2PSOpenGL2-8.1.dll"
  Delete "$INSTDIR\bin\vtkRenderingLabel-8.1.dll"
  Delete "$INSTDIR\bin\vtkRenderingOpenGL2-8.1.dll"
  Delete "$INSTDIR\bin\vtkRenderingQt-8.1.dll"
  Delete "$INSTDIR\bin\vtkRenderingVolume-8.1.dll"
  Delete "$INSTDIR\bin\vtkRenderingVolumeOpenGL2-8.1.dll"
  Delete "$INSTDIR\bin\vtksys-8.1.dll"
  Delete "$INSTDIR\bin\vtktiff-8.1.dll"
  Delete "$INSTDIR\bin\vtkzlib-8.1.dll"
  Delete "$INSTDIR\thirdpartyinstallers"
  Delete "$INSTDIR\thirdpartyinstallers\vc_redist.x64.exe"

  RMDir "$INSTDIR\bin\MitkCore"
  RMDir "$INSTDIR\bin\plugins\iconengines"
  RMDir "$INSTDIR\bin\plugins\imageformats"
  RMDir "$INSTDIR\bin\plugins\platforms"
  RMDir "$INSTDIR\bin\plugins\sqldrivers"
  RMDir "$INSTDIR\bin\plugins\styles"
  RMDir "$INSTDIR\bin\plugins"
  RMDir "$INSTDIR\bin\resources"
  RMDir "$INSTDIR\bin\translations\qtwebengine_locales"
  RMDir "$INSTDIR\bin\translations"
  RMDir "$INSTDIR\bin"
  RMDir "$INSTDIR\thirdpartyinstallers"

!ifdef CPACK_NSIS_ADD_REMOVE
  ;Remove the add/remove program
  Delete "$INSTDIR\AddRemove.exe"
!endif

  ;Remove the uninstaller itself.
  Delete "$INSTDIR\Uninstall.exe"
  DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\MITK"

  ;Remove the installation directory if it is empty.
  RMDir "$INSTDIR"

  ; Remove the registry entries.
  DeleteRegKey SHCTX "Software\German Cancer Research Center (DKFZ)\MITK NO TAG FOUND"

  ; Removes all optional components
  !insertmacro SectionList "RemoveSection_CPack"

  !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP

  Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
  Delete "$SMPROGRAMS\$MUI_TEMP\MITK Workbench.lnk"
  Delete "$SMPROGRAMS\$MUI_TEMP\MITK Web Site.url"

  ;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"

  ;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\German Cancer Research Center (DKFZ)\MITK NO TAG FOUND"

  Push $INSTDIR\bin
  StrCmp $DO_NOT_ADD_TO_PATH_ "1" doNotRemoveFromPath 0
    Call un.RemoveFromPath
  doNotRemoveFromPath:
SectionEnd

;--------------------------------
; 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
  ; Reads components status for registry
  !insertmacro SectionList "InitSection"

  ; check to see if /D has been used to change
  ; the install directory by comparing it to the
  ; install directory that is expected to be the
  ; default
  StrCpy $IS_DEFAULT_INSTALLDIR 0
  StrCmp "$INSTDIR" "$PROGRAMFILES64\MITK NO TAG FOUND" 0 +2
    StrCpy $IS_DEFAULT_INSTALLDIR 1

  StrCpy $SV_ALLUSERS "JustMe"
  ; if default install dir then change the default
  ; if it is installed for JustMe
  StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2
    StrCpy $INSTDIR "$DOCUMENTS\MITK NO TAG FOUND"

  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 +3
    StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2
      StrCpy $INSTDIR "$PROGRAMFILES64\MITK NO TAG FOUND"

  StrCmp "ON" "ON" 0 noOptionsPage
    !insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini"

  noOptionsPage:
FunctionEnd
dboun commented 4 years ago

Actually it's worth it to try NSIS 2.x again, because apparently that's what the MITK guys use

https://sourceforge.net/p/mitk/mailman/message/36318714/

dboun commented 4 years ago

For solving the "NO TAG FOUND" we should probably

include(mitkFunctionGetVersionDescription)
mitkFunctionGetVersionDescription(${CMAKE_CURRENT_DIR} CaPTk)

in the main CMakeLists of our project

(this might be also needed, but probably not)

set(MITK_CMAKE_DIR ${MITK_SOURCE_DIR}/CMake)
set(CMAKE_MODULE_PATH ${MITK_CMAKE_DIR})
dboun commented 4 years ago

This is fixed by using the correct NSIS version and also giving a tag to the MITK source repo