;--------------------------------
; Requires files:
; config.nsh
; files-install.nsh
; files-uninstall.nsh
; files-stuff-install.nsh
; files-stuff-uninstall.nsh
; Defines which will set by 'config.nsh':
; PK_NAME - XxxxxXxxxx - name without spaces
; PK_NAME_FULL - Xxxxx Xxxxxxxxxx - full name, may be with spaces
; PK_ARCH - XX - architecture, 32 or 64
; PK_VERSION - X.X - first two numbers of version
; PK_VERSION_FULL - X.X.X-xxxxx-xxxxx - full version, without spaces
; PK_EXECUTABLE - xxx\XxxxXxxx-xxx_xxx.exe - subpath to executable file
!include "config.nsh"
;--------------------------------
!include "MUI2.nsh"
;second directory selection
;--------------------------------
; The name of the installer
Name "${PK_NAME_FULL} ${PK_VERSION_FULL}"
; The file to write
OutFile "${PK_NAME}-${PK_VERSION_FULL}.exe"
; The default installation directory and registry
InstallDir "$PROGRAMFILES${PK_ARCH}\${PK_NAME}"
Var STUFFDIR
; Request application privileges for Windows Vista
RequestExecutionLevel highest
!insertmacro MUI_LANGUAGE "English"
!define MUI_ABORTWARNING
!define SHCNE_ASSOCCHANGED 0x8000000
!define SHCNF_IDLIST 0
!define PRODUCT_REG_KEY "Software\${PK_NAME}"
!define PRODUCT_STUFF_KEY "${PRODUCT_REG_KEY}\${PK_NAME}\${PK_VERSION}"
!define PRODUCT_UNINSTALL_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PK_NAME}"
!define PRODUCT_UNINSTALL_KEY2 "Software\Microsoft\Windows\CurrentVersion\Uninstall\{D9A9B1A3-9370-4BE9-9C8F-7B52EEECB973}_is1"
!define PRODUCT_UNINSTALL_EXE "uninstall-${PK_NAME}.exe"
;--------------------------------
; Pages
!insertmacro MUI_PAGE_COMPONENTS
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE InstDirPageLeave
!insertmacro MUI_PAGE_DIRECTORY
Function InstDirPageLeave
StrCpy $STUFFDIR "C:\${PK_NAME} ${PK_VERSION} stuff"
FunctionEnd
!define MUI_DIRECTORYPAGE_VARIABLE $STUFFDIR
!define MUI_DIRECTORYPAGE_TEXT_TOP "Choose stuff directory for ${PK_NAME}..."
!define MUI_DIRECTORYPAGE_TEXT_DESTINATION "Stuff Directory:"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
;--------------------------------
; Installer
;--------------------------------
Section "${PK_NAME_FULL} (required)"
SetRegView ${PK_ARCH}
SectionIn RO
SetOutPath "$INSTDIR"
!include "files-install.nsh"
SetOutPath "$STUFFDIR"
!include "files-stuff-install.nsh"
WriteRegStr HKLM "${PRODUCT_REG_KEY}" "Path" "$INSTDIR"
WriteRegStr HKLM "${PRODUCT_REG_KEY}" "Version" "${PK_VERSION_FULL}"
WriteRegStr HKLM "${PRODUCT_STUFF_KEY}" "TOONZROOT" "$STUFFDIR"
WriteRegStr HKLM "${PRODUCT_STUFF_KEY}" "TOONZPROJECTS" "$STUFFDIR\projects"
WriteRegStr HKLM "${PRODUCT_STUFF_KEY}" "TOONZCACHEROOT" "$STUFFDIR\cache"
WriteRegStr HKLM "${PRODUCT_STUFF_KEY}" "TOONZCONFIG" "$STUFFDIR\config"
WriteRegStr HKLM "${PRODUCT_STUFF_KEY}" "TOONZPROFILES" "$STUFFDIR\profiles"
WriteRegStr HKLM "${PRODUCT_STUFF_KEY}" "TOONZFXPRESETS" "$STUFFDIR\fxs"
WriteRegStr HKLM "${PRODUCT_STUFF_KEY}" "TOONZLIBRARY" "$STUFFDIR\library"
WriteRegStr HKLM "${PRODUCT_STUFF_KEY}" "TOONZSTUDIOPALETTE" "$STUFFDIR\studiopalette"
WriteRegStr HKLM "${PRODUCT_STUFF_KEY}" "FARMROOT" ""
; Write the uninstall keys for Windows
WriteRegStr HKLM "${PRODUCT_UNINSTALL_KEY}" "DisplayName" "${PK_NAME_FULL}"
WriteRegStr HKLM "${PRODUCT_UNINSTALL_KEY}" "DisplayVersion" "${PK_VERSION_FULL}"
WriteRegStr HKLM "${PRODUCT_UNINSTALL_KEY}" "UninstallString" '"$INSTDIR\${PRODUCT_UNINSTALL_EXE}"'
WriteRegDWORD HKLM "${PRODUCT_UNINSTALL_KEY}" "NoModify" 1
WriteRegDWORD HKLM "${PRODUCT_UNINSTALL_KEY}" "NoRepair" 1
System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
SetOutPath "$INSTDIR"
WriteUninstaller "${PRODUCT_UNINSTALL_EXE}"
SectionEnd
; Optional section (can be disabled by the user)
Section "Start Menu Shortcuts"
SetRegView ${PK_ARCH}
SetOutPath "$INSTDIR\bin"
SetShellVarContext All
CreateDirectory "$SMPROGRAMS\${PK_NAME_FULL}"
CreateShortCut "$SMPROGRAMS\${PK_NAME_FULL}\Uninstall ${PK_NAME_FULL}.lnk" "$INSTDIR\uninstall-${PK_NAME}.exe" "" "$INSTDIR\uninstall-${PK_NAME}.exe" 0
CreateShortCut "$SMPROGRAMS\${PK_NAME_FULL}\${PK_NAME_FULL}.lnk" "$INSTDIR\${PK_EXECUTABLE}" "" "$INSTDIR\${PK_EXECUTABLE}" 0
SectionEnd
;--------------------------------
; Uninstaller
;--------------------------------
Section "Uninstall"
SetRegView ${PK_ARCH}
ReadRegStr $INSTDIR HKLM "${PRODUCT_REG_KEY}" "Path"
ReadRegStr $STUFFDIR HKLM "${PRODUCT_REG_KEY}\${PK_NAME}\${PK_VERSION}" "TOONZROOT"
; Remove registry keys
DeleteRegKey HKLM "${PRODUCT_REG_KEY}"
DeleteRegKey HKLM "${PRODUCT_UNINSTALL_KEY}"
; Remove files and uninstaller
!include "files-stuff-uninstall.nsh"
!include "files-uninstall.nsh"
Delete "$INSTDIR\${PRODUCT_UNINSTALL_EXE}"
; Remove shortcuts, if any
SetShellVarContext All
Delete "$SMPROGRAMS\${PK_NAME_FULL}\${PK_NAME_FULL}.lnk"
Delete "$SMPROGRAMS\${PK_NAME_FULL}\Uninstall ${PK_NAME_FULL}.lnk"
; Remove directories used
RMDir "$SMPROGRAMS\${PK_NAME_FULL}"
RMDir "$STUFFDIR"
RMDir "$INSTDIR"
System::Call 'Shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_IDLIST}, i 0, i 0)'
SectionEnd
Function .onInit
SetRegView 32
; Check previous installation
ReadRegStr $R0 HKLM "${PRODUCT_UNINSTALL_KEY}" "UninstallString"
StrCmp $R0 "" 0 oops
; Check previous installation 2
ReadRegStr $R0 HKLM "${PRODUCT_UNINSTALL_KEY2}" "UninstallString"
StrCmp $R0 "" 0 oops
SetRegView 64
; Check previous installation
ReadRegStr $R0 HKLM "${PRODUCT_UNINSTALL_KEY}" "UninstallString"
StrCmp $R0 "" 0 oops
; Check previous installation 2
ReadRegStr $R0 HKLM "${PRODUCT_UNINSTALL_KEY2}" "UninstallString"
StrCmp $R0 "" 0 oops
BringToFront
Return
oops:
MessageBox MB_OK|MB_ICONEXCLAMATION "Another version of ${PK_NAME_FULL} appears to be installed. Please, uninstall it first?"
Abort
FunctionEnd