base.nsi 6.61 KB
; NSIS script - ONLY for use with AutoPublish/AutoUpdate system
; //keitsi

;--------------------------------
;Include Modern UI

  !include "MUI.nsh"

;--------------------------------
;Configuration
  SetCompressor lzma

  Name "<$PROJECTNAME$> <$CUSTOMER$> v<$VERSION$>"
  ; DO NOT CHANGE OutFile "installer_temp.exe" !!! AutoPublish requires this.
  ; AutoPublish will move the installer according to autopublish.xml file.
  OutFile "installer_temp.exe"
  
  ;Folder selection page
  ; InstallDir "$PROGRAMFILES\<$PROJECTNAME$>_<$CUSTOMER$>"
  
  ShowInstDetails show

;--------------------------------
;Interface Settings

  !define MUI_ABORTWARNING

;--------------------------------
;Pages

  ; !insertmacro MUI_PAGE_LICENSE "license.txt"
  !insertmacro MUI_PAGE_COMPONENTS
  !insertmacro MUI_PAGE_DIRECTORY
  !insertmacro MUI_PAGE_INSTFILES

  ; !define MUI_FINISHPAGE_RUN $INSTDIR\<$BINARYNAMEORIG$>
  !insertmacro MUI_PAGE_FINISH

  !insertmacro MUI_UNPAGE_CONFIRM
  !insertmacro MUI_UNPAGE_INSTFILES

;--------------------------------
;Languages
 
  !insertmacro MUI_LANGUAGE "English"

;--------------------------------
;Installer Sections

Function GetDotNet
  IfFileExists "$WINDIR\Microsoft.NET\Framework\v2.0.50727\installUtil.exe" NextStep
  MessageBox MB_OK|MB_ICONEXCLAMATION "You must have the Microsoft .NET Framework 2.0 Installed to use this application. $\n$\nClick 'Open' in the following file dialog to download and run the Microsoft .NET Framework Installer..."
  ExecShell Open "http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=0856eacb-4362-4b0d-8edd-aab15c5e04f5&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2f6%2f7%2f567758a3-759e-473e-bf8f-52154438565a%2fdotnetfx.exe" SW_SHOWNORMAL
  Quit
NextStep:
FunctionEnd

Function .onInit
; Uber users are so uber that they do not need checks ;)
;  Call GetDotNet
  Call DetectInstallDir
FunctionEnd

Function DetectInstallDir
  ;Try to get install folder from obsoleted registry key first, if available
  ClearErrors
  ReadRegStr $INSTDIR HKCU "Software\<$PROJECTNAME$>" ""
  IfErrors 0 instdirfound
  ClearErrors
  ; No obsoleted regkey present, try to read the correct one
  ReadRegStr $INSTDIR HKCU "Software\<$PROJECTNAME$>_<$CUSTOMER$>" ""
  IfErrors 0 instdirfound
  ClearErrors
  ; No installation dir regkey present at all - use default installation directory.
  StrCpy $INSTDIR "$PROGRAMFILES\<$PROJECTNAME$>_<$CUSTOMER$>"
instdirfound:
FunctionEnd

Function .onInstSuccess
  Exec '"$INSTDIR\<$BINARYNAMEORIG$>"'
FunctionEnd

Function WaitProgramClose
  IfFileExists "$INSTDIR\<$BINARYNAMEORIG$>" loop NotInstalled
loop:
  ClearErrors
  Delete "$INSTDIR\<$BINARYNAMEORIG$>"
  ${If} ${Errors}
    ; Delete failed - means the program is still running. Sleep 2 seconds and retry.
    Sleep 3000
    ClearErrors
    Delete "$INSTDIR\<$BINARYNAMEORIG$>"
    ${If} ${Errors}
      MessageBox MB_OK "Program <$BINARYNAMEORIG$> didn't close in 2 seconds. Automatic update can't continue before it's closed. Please close the program manually and hit OK to retry."
      goto loop
    ${EndIf}
  ${EndIf}
NotInstalled:
FunctionEnd

Section "!<$PROJECTNAME$> <$CUSTOMER$> <$VERSIONGROUP$> v<$VERSION$>" SecMain
  SetShellVarContext current
  SetOutPath "$INSTDIR"
  Call WaitProgramClose
  ; SetOverwrite Off
  
  SetOverwrite On

  File /oname=opencv_core220.dll "<$BINARYDIR$>\opencv_core220.dll"
  File /oname=opencv_imgproc220.dll "<$BINARYDIR$>\opencv_imgproc220.dll"
  File /oname=cvextern.dll "<$BINARYDIR$>\cvextern.dll"
  File /oname=opencv_calib3d220.dll "<$BINARYDIR$>\opencv_calib3d220.dll"
  File /oname=opencv_contrib220.dll "<$BINARYDIR$>\opencv_contrib220.dll"
  File /oname=opencv_features2d220.dll "<$BINARYDIR$>\opencv_features2d220.dll"
  File /oname=opencv_flann220.dll "<$BINARYDIR$>\opencv_flann220.dll"
  File /oname=opencv_gpu220.dll "<$BINARYDIR$>\opencv_gpu220.dll"
  File /oname=opencv_highgui220.dll "<$BINARYDIR$>\opencv_highgui220.dll"
  File /oname=opencv_imgproc220.dll "<$BINARYDIR$>\opencv_imgproc220.dll"
  File /oname=opencv_legacy220.dll "<$BINARYDIR$>\opencv_legacy220.dll"
  File /oname=opencv_ml220.dll "<$BINARYDIR$>\opencv_ml220.dll"
  File /oname=opencv_objdetect220.dll "<$BINARYDIR$>\opencv_objdetect220.dll"
  File /oname=opencv_video220.dll "<$BINARYDIR$>\opencv_video220.dll"
  File /oname=highgui110.dll "<$BINARYDIR$>\highgui110.dll"
  File /oname=cv110.dll "<$BINARYDIR$>\cv110.dll"
  File /oname=cvaux110.dll "<$BINARYDIR$>\cvaux110.dll"
  File /oname=cxcore110.dll "<$BINARYDIR$>\cxcore110.dll"

  File /oname=haarcascade_frontalface_default.xml "<$BINARYDIR$>\haarcascade_frontalface_default.xml"
  File /oname=autoupdate.xml "<$BINARYDIR$>\autoupdate.<$CUSTOMER$>.xml"
  File /oname=<$BINARYNAMEORIG$> "<$BINARYDIR$>\<$BINARYNAMEOBF$>"
  File autoupdate.crt

  ; this line will be replicated for every non-default existing assembly
  ; that is referenced to the main project.
  File "<$REFERENCEDASSEMBLY$>"
  File "<$DEBUGDATABASES$>"

  ; Write install path to registry (projectname_customer_versiongroup)
  WriteRegStr HKCU "Software\<$PROJECTNAME$>_<$CUSTOMER$>" "" $INSTDIR
  ; Remove obsoleted registry key on install
  DeleteRegKey HKCU "Software\<$PROJECTNAME$>"

  ;Create uninstaller
  WriteUninstaller "$INSTDIR\Uninstall.exe"

  ;Create shortcuts
  CreateDirectory "$SMPROGRAMS\<$PROJECTNAME$> <$CUSTOMER$>"
  CreateShortCut "$SMPROGRAMS\<$PROJECTNAME$> <$CUSTOMER$>\<$PROJECTNAME$>.lnk" "$INSTDIR\<$BINARYNAMEORIG$>"
  CreateShortCut "$SMPROGRAMS\<$PROJECTNAME$> <$CUSTOMER$>\Uninstall <$PROJECTNAME$>.lnk" "$INSTDIR\Uninstall.exe"
  
  ; Remove shortcuts from old shortcut naming scheme path, if any
  SetShellVarContext all
  Delete "$SMPROGRAMS\<$PROJECTNAME$>\<$PROJECTNAME$>.lnk"
  Delete "$SMPROGRAMS\<$PROJECTNAME$>\Uninstall <$PROJECTNAME$>.lnk"
  RMDir "$SMPROGRAMS\<$PROJECTNAME$>"
  SetShellVarContext current
  Delete "$SMPROGRAMS\<$PROJECTNAME$>\<$PROJECTNAME$>.lnk"
  Delete "$SMPROGRAMS\<$PROJECTNAME$>\Uninstall <$PROJECTNAME$>.lnk"
  RMDir "$SMPROGRAMS\<$PROJECTNAME$>"
SectionEnd

;--------------------------------
;Descriptions

  LangString DESC_SecMain ${LANG_ENGLISH} "Base (required)"

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

Section "Uninstall"

  Delete "$SMPROGRAMS\<$PROJECTNAME$> <$CUSTOMER$>\*"
  RMDir "$SMPROGRAMS\<$PROJECTNAME$> <$CUSTOMER$>"
  Delete "$INSTDIR\<$BINARYNAMEORIG$>"
  Delete "$INSTDIR\autoupdate.xml"
  Delete "$INSTDIR\autoupdate.crt"

  ; this line will be replicated for every non-default existing assembly
  ; that is referenced to the main project.
  Delete "$INSTDIR\<$REFERENCEDASSEMBLY$>"
  Delete "$INSTDIR\<$DEBUGDATABASES$>"

  Delete "$INSTDIR\Uninstall.exe"

  RMDir "$INSTDIR"
  
SectionEnd