sbsv2/raptor/util/install-windows/raptorinstallerscript.nsi
changeset 3 e1eecf4d390d
parent 0 044383f39525
child 5 593a8820b912
--- a/sbsv2/raptor/util/install-windows/raptorinstallerscript.nsi	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/install-windows/raptorinstallerscript.nsi	Mon Nov 16 09:46:46 2009 +0000
@@ -1,486 +1,486 @@
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-# Raptor installer/uninstaller script
-
-# Standard NSIS Library includes 
-!include "MUI2.nsh"
-!include "LogicLib.nsh"
-!include "WinMessages.nsh"
-
-# Extra plugin includes
-!include "nsDialogs.nsh"
-!include "Registry.nsh"
-!include "NSISpcre.nsh"
-!include "Time.nsh"
-
-# Define functions from NSISpcre.nsh 
-!insertmacro REMatches
-!insertmacro un.REMatches
-!insertmacro REQuoteMeta
-
-# Variables
-Var DIALOG
-Var RESULT # Generic variable to obtain results, and immediately thrown away after
-Var RESULT2 # Generic variable to obtain results, and immediately thrown away after
-Var SBS_HOME
-Var USERONLYINSTALL_HWND # HWND of radio button control for user-only installation
-Var ALLUSERSINSTALL_HWND # HWND of radio button control for system installation
-Var NOENVCHANGES_HWND    # HWND of radio button control for file-only installation
-Var USERONLYINSTALL_STATE # State of user-only radio button
-Var ALLUSERSINSTALL_STATE # State of system radio button
-Var NOENVCHANGES_STATE # State of file-only installation radio button
-Var INSTALL_TYPE # Type of installer ("USR" or "SYS")
-
-# Custom includes (depend on above variables so much be here)
-!include "raptorinstallerutils.nsh" # Functions and macros for handling environment variables
-!include "raptorversion.nsh" # Define the RAPTOR_VERSION variable
-
-# Defines
-# !define /date DATE_STAMP "%Y-%m-%d-%H-%M-%S"
-!define INSTALLER_NAME "Raptor v${RAPTOR_VERSION}"
-!define RAPTOR "sbs"
-!define INSTALLER_FILENAME "${RAPTOR}-${RAPTOR_VERSION}.exe"
-!define UNINSTALLER_FILENAME "${RAPTOR}-${RAPTOR_VERSION}-uninstaller.exe"
-
-########################## Attributes ###########################
-# Name of installer executable to create!
-OutFile ${INSTALLER_FILENAME}
-# Name for the installer caption
-Name "Raptor v${RAPTOR_VERSION}"
-
-####################### Generic Behaviour #######################
-# Vista support; use admin in case user decides to install Raptor for all users
-RequestExecutionLevel admin
-# Set XPStyle on
-XPStyle on
-
-###################### Installer Behaviour ######################
-# Warn on Cancel
-!define MUI_ABORTWARNING
-# Abort warning text
-!define MUI_ABORTWARNING_TEXT "Are you sure you want to quit the ${INSTALLER_NAME} installer?"
-# Cancel is default button on cancel dialogue boxes.
-!define MUI_ABORTWARNING_CANCEL_DEFAULT
-# Don't just to final page
-!define MUI_FINISHPAGE_NOAUTOCLOSE
-# Show installer details
-ShowInstDetails show
-
-##################### Pages in the installer #####################
-!insertmacro MUI_PAGE_WELCOME
-# Temporarily useing RELEASE-NOTES.txt as there is not license.txt
-!insertmacro MUI_PAGE_LICENSE ${RAPTOR_LOCATION}\RELEASE-NOTES.txt
-!define MUI_PAGE_HEADER_TEXT "Installation type"
-Page custom UserOrSysInstall UserOrSysInstallLeave
-!define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirLeave # Directory page exit function - disallow spaces in $INSTDIR
-!insertmacro MUI_PAGE_DIRECTORY
-!insertmacro MUI_PAGE_INSTFILES
-!insertmacro MUI_PAGE_FINISH
-
-######################## .onInit function ########################
-Function .onInit
-    StrCpy $INSTDIR "C:\Apps\Raptor"
-FunctionEnd
-
-#################### Sections in the installer ####################
-# "Sections" - i.e. components to install. This installer
-# only has Raptor, so there is no point giving options 
-# to the user.
-Section "Install Raptor" INSTALLRAPTOR
-	
-    StrCpy $SBS_HOME "SBS_HOME"
-	
-    # Install Raptor
-    SetOutPath "$INSTDIR\bin"
-    File /r ${RAPTOR_LOCATION}\bin\*.* 
-    SetOutPath "$INSTDIR\examples"
-    File /r ${RAPTOR_LOCATION}\examples\*.*
-    SetOutPath "$INSTDIR\lib"
-    File /r ${RAPTOR_LOCATION}\lib\*.*
-    SetOutPath "$INSTDIR\python"
-    File /r ${RAPTOR_LOCATION}\python\*.*
-    SetOutPath "$INSTDIR\schema"
-    File /r ${RAPTOR_LOCATION}\schema\*.*
-    SetOutPath "$INSTDIR\win32"
-    File /r ${RAPTOR_LOCATION}\win32\*.*
-    
-    SetOutPath "$INSTDIR"
-    File ${RAPTOR_LOCATION}\RELEASE-NOTES.txt
-    
-    
-    ${Unless} $INSTALL_TYPE == "NO_ENV"
-        # Back up system and user environments before changing them.
-        !insertmacro DefineDateStamp
-        !define SYS_REG_BACKUP_FILE "$INSTDIR\SysEnvBackUpPreInstall-${DATE_STAMP}.reg"
-        !define USR_REG_BACKUP_FILE "$INSTDIR\UsrEnvBackUpPreInstall-${DATE_STAMP}.reg"
-        
-        # Save System Environment just in case.
-        ${registry::SaveKey} "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "${SYS_REG_BACKUP_FILE}" "" "$RESULT"
-        
-        ${If} $RESULT == 0
-            DetailPrint "Successfully backed up system environment in ${SYS_REG_BACKUP_FILE}."
-        ${Else}
-            DetailPrint "Failed to back up system environment due to an unknown error."
-        ${EndIf}
-        
-        # Save user Environment just in case.
-        ${registry::SaveKey} "HKCU\Environment" "${USR_REG_BACKUP_FILE}" "" "$RESULT"
-        
-        ${If} $RESULT == 0
-            DetailPrint "Successfully backed up user environment in ${USR_REG_BACKUP_FILE}."
-        ${Else}
-            DetailPrint "Failed to back up user environment due to an unknown error."
-        ${EndIf}
-    	
-    	# Reset error flag
-    	ClearErrors
-    	
-    	# Write SBS_HOME variable; if it exists, the user will be asked if they want it to be overwritten.
-    	# Read the env var from the appropriate place
-    	!insertmacro ReadEnvVar $SBS_HOME $RESULT
-    	
-    	${Unless} ${Errors} # No errors, so $SBS_HOME exists
-    		DetailPrint "Env Var $SBS_HOME exists with value $RESULT"
-    		# Ask user if they want it replaced. If yes, write it, if no don't write it.
-    		MessageBox MB_YESNO|MB_ICONQUESTION "The ${INSTALLER_NAME} installer has detected that you already have the SBS_HOME environment variable set with value $RESULT. Would you like the installer to overwrite it with the value $INSTDIR? Click yes to over write with value $INSTDIR, and no to leave it as $RESULT." IDYES write_env_var_yes IDNO write_env_var_no
-    	${Else} # No env var named $SBS_HOME
-    		DetailPrint "Env Var $SBS_HOME does not exist!"
-    	${EndUnless}
-    	
-write_env_var_yes:
-    	# Write SBS_HOME to registry
-    	Push "SBS_HOME" # Third on stack
-    	Push "$INSTDIR" # Second on stack
-    	Push "" # First on stack
-    	
-    	# Needs env var name, env var value, then "" on the stack
-    	call WriteEnvVar
-    	
-    	# Prepend PATH with %SBS_HOME%\bin
-    	Push "%SBS_HOME%\bin" # First on stack
-    	call PrependToPath
-    	goto end
-        
-write_env_var_no:
-    	DetailPrint "Not writing the environment variable $SBS_HOME."
-        
-end:
-    ${EndUnless} 
-	
-	# Generate batch file to set environment variables for Raptor
-	StrCpy $RESULT "@REM Environment variables for ${INSTALLER_NAME}$\r$\nset SBS_HOME=$INSTDIR$\r$\nset PATH=%SBS_HOME%\bin;%PATH%$\r$\n"
-	!insertmacro WriteFile "RaptorEnv.bat" "$RESULT"
-SectionEnd
-
-# Finishing up installation.
-Section
-    ${Unless} $INSTALL_TYPE == "NO_ENV"
-    	# Refresh environment to get changes for SBS_HOME and PATH
-        !insertmacro RefreshEnv
-    ${EndUnless}
-	
-	# Write the uninstaller
-	# WriteUninstaller "$INSTDIR\${UNINSTALLER_FILENAME}"
-	WriteUninstaller "$INSTDIR\${UNINSTALLER_FILENAME}"
-	# Unload registry plug in
-	${registry::Unload}
-SectionEnd
-
-# Custom install page to select install type
-Function UserOrSysInstall
-    !insertmacro MUI_HEADER_TEXT "Choose Installation Type" "Choose the type of installation \
-    you would like for your computer."
-    
-	nsDialogs::Create 1018
-	Pop $DIALOG
-	
-	# Exit is unable to create dialog
-	${If} $DIALOG == error
-		Abort
-	${EndIf}
-	
-	# Create second radio button for system install
-	#${NSD_CreateRadioButton} 0 10u 100% 33% "Install Raptor for all users on this computer. \
-    #(Recommended).$\nThis option modifies system wide environment variables."
-	#Pop $ALLUSERSINSTALL_HWND
-    
-    # Create first radio button for user install
-    #${NSD_CreateRadioButton} 0 45u 100% 67% "Install Raptor just for me on this computer.\
-    #$\nThis option modifies only user environment variables."
-    #Pop $USERONLYINSTALL_HWND
-	
-	# Create first radio button for system install
-	${NSD_CreateRadioButton} 0 0% 100% 30% "Install Raptor for all users on this computer. \
-    (Recommended).$\nThis option modifies system wide environment variables."
-	Pop $ALLUSERSINSTALL_HWND
-    
-    # Create second radio button for user install
-    ${NSD_CreateRadioButton} 0 25% 100% 30% "Install Raptor just for me on this computer.\
-    $\nThis option modifies only user environment variables."
-    Pop $USERONLYINSTALL_HWND
-    
-    # Create third radio button for file-only install
-    ${NSD_CreateRadioButton} 0 50% 100% 40% "Install, but do not modify the environment.\
-    $\nThis option only unpacks Raptor's files. A batch file in the installation \ 
-    folder (RaptorEnv.bat) can be used to set Raptor's environment variables in a command prompt."
-    Pop $NOENVCHANGES_HWND
-	
-	# Update page control with previous state, if set.
-	# Initially these will be blank, so set system install to be on by default.
-	${If} $USERONLYINSTALL_STATE == ""
-	${AndIf} $ALLUSERSINSTALL_STATE == ""
-    ${AndIf} $NOENVCHANGES_STATE == ""
-		${NSD_SetState} $ALLUSERSINSTALL_HWND ${BST_CHECKED}
-	${Else} # Previously set, user has returned to this page using "Back" button
-		${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
-			${NSD_SetState} $USERONLYINSTALL_HWND ${BST_CHECKED}
-		${ElseIf} $NOENVCHANGES_STATE == ${BST_CHECKED}
-            ${NSD_SetState} $NOENVCHANGES_HWND ${BST_CHECKED}
-        ${Else}
-			${NSD_SetState} $ALLUSERSINSTALL_HWND ${BST_CHECKED}
-		${EndIf}
-	${EndIf}
-	
-	nsDialogs::Show
-FunctionEnd
-
-# Store the states of the radio buttons once the user has left the page.
-Function UserOrSysInstallLeave
-	${NSD_GetState} $USERONLYINSTALL_HWND $USERONLYINSTALL_STATE
-	${NSD_GetState} $ALLUSERSINSTALL_HWND $ALLUSERSINSTALL_STATE
-    ${NSD_GetState} $NOENVCHANGES_HWND $NOENVCHANGES_STATE
-    
-    # Set the ${INSTALL_TYPE} variable
-    ${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
-        StrCpy $INSTALL_TYPE "USR"
-    ${EndIf}
-    
-    ${If} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
-        StrCpy $INSTALL_TYPE "SYS"
-    ${EndIf}
-    
-    ${If} $NOENVCHANGES_STATE == ${BST_CHECKED}
-        StrCpy $INSTALL_TYPE "NO_ENV"
-    ${EndIf}
-    
-    ${Unless} $INSTALL_TYPE == "USR"
-    ${AndUnless} $INSTALL_TYPE == "SYS"
-    ${AndUnless} $INSTALL_TYPE == "NO_ENV"
-        Abort "Failed to determine installation type.\n\
-        $$INSTALL_TYPE = $\"$INSTALL_TYPE$\"."
-    ${EndUnless} 
-FunctionEnd
-
-Function DirLeave
-	StrCpy $0 " "
-	${REQuoteMeta} $9 $0 # $9 now contains the meta-quoted version of $0
-	${If} $INSTDIR =~ $9
-		MessageBox MB_OK|MB_ICONSTOP "Please choose a directory without a space in it."
-		Abort
-	${EndIf}
-FunctionEnd
-
-########################### Uninstaller #########################
-######################## .onInit function ########################
-Function un.onInit
-	!undef DATE_STAMP
-	!insertmacro DefineDateStamp
-FunctionEnd
-########################### Behaviour ###########################
-# Warn on Cancel
-!define MUI_UNABORTWARNING
-# Abort warning text
-!undef MUI_UNABORTWARNING_TEXT
-!define MUI_UNABORTWARNING_TEXT "Are you sure you want to quit the ${INSTALLER_NAME} uninstaller?"
-# Cancel is default button on cancel dialogue boxes.
-!define MUI_UNABORTWARNING_CANCEL_DEFAULT
-# Don't just to final page
-!define MUI_UNFINISHPAGE_NOAUTOCLOSE
-# Show uninstaller details
-ShowUninstDetails show
-
-#################### Pages in the uninstaller ####################
-!insertmacro MUI_UNPAGE_WELCOME
-!insertmacro MUI_UNPAGE_CONFIRM
-!insertmacro MUI_UNPAGE_INSTFILES
-!insertmacro MUI_UNPAGE_FINISH
-
-################## Sections in the uninstaller ##################
-# There is only one section in the uninstaller.
-Section "Uninstall"
-    # Delete Raptor
-    RmDir /r $INSTDIR\bin
-    RmDir /r $INSTDIR\examples
-    RmDir /r $INSTDIR\lib
-    RmDir /r $INSTDIR\python
-    RmDir /r $INSTDIR\schema
-    RmDir /r $INSTDIR\win32
-    Delete $INSTDIR\RELEASE-NOTES.txt
-    Delete $INSTDIR\RaptorEnv.bat
-    Delete $INSTDIR\${UNINSTALLER_FILENAME}
-    
-    !undef SYS_REG_BACKUP_FILE
-    !undef USR_REG_BACKUP_FILE
-    !define SYS_REG_BACKUP_FILE "$INSTDIR\SysEnvBackUpPreUninstall-${DATE_STAMP}.reg"
-    !define USR_REG_BACKUP_FILE "$INSTDIR\UsrEnvBackUpPreUninstall-${DATE_STAMP}.reg"
-    
-    # Save System Environment just in case.
-    ${registry::SaveKey} "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "${SYS_REG_BACKUP_FILE}" "" "$RESULT"
-    
-    ${If} $RESULT == 0
-        DetailPrint "Successfully backed up system environment in ${SYS_REG_BACKUP_FILE}."
-    ${Else}
-        DetailPrint "Failed to back up system environment due to an unknown error."
-    ${EndIf}
-    
-    # Save user Environment just in case.
-    ${registry::SaveKey} "HKCU\Environment" "${USR_REG_BACKUP_FILE}" "" "$RESULT"
-    
-    ${If} $RESULT == 0
-        DetailPrint "Successfully backed up user environment in ${USR_REG_BACKUP_FILE}."
-    ${Else}
-        DetailPrint "Failed to back up user environment due to an unknown error."
-    ${EndIf}
-	
-	# Reset error flag
-	ClearErrors
-	
-	# Read user SBS_HOME
-	!insertmacro ReadUsrEnvVar "SBS_HOME" $RESULT
-	
-	${Unless} ${Errors} # No errors, so user %SBS_HOME% exists
-		DetailPrint "Removing user environment variable SBS_HOME ($RESULT)"
-		
-		# Reset error flag
-		ClearErrors
-		!insertmacro RmUsrEnvVar "SBS_HOME"
-		
-		${If} ${Errors}
-			DetailPrint "ERROR: The ${INSTALLER_NAME} uninstaller could not remove the user environment variable SBS_HOME."
-			DetailPrint "Please remove it manually."
-		${EndIf}
-		
-	${Else} # No env var named $SBS_HOME
-		DetailPrint "Note: Unable to find user environment variable SBS_HOME."
-		DetailPrint "If required, this variable may need to be removed manually."
-	${EndUnless}
-	
-	# Reset error flag
-	ClearErrors
-	
-	# Read system SBS_HOME
-	!insertmacro ReadSysEnvVar "SBS_HOME" $RESULT
-	
-	${Unless} ${Errors} # No errors, so system $SBS_HOME exists
-		DetailPrint "Removing system environment variable SBS_HOME ($RESULT)"
-		
-		# Reset error flag
-		ClearErrors
-		!insertmacro RmSysEnvVar "SBS_HOME"
-		
-		${If} ${Errors}
-			DetailPrint "ERROR: The ${INSTALLER_NAME} uninstaller could not remove the \
-            System environment variable SBS_HOME."
-			DetailPrint "Please remove it manually."
-		${EndIf}
-		
-	${Else} # No env var named $SBS_HOME
-		DetailPrint "Note: Unable to find system environment variable SBS_HOME."
-		DetailPrint "If required, this variable may need to be removed manually."
-	${EndUnless}
-	
-	################################# Clean up the path env vars #################################
-	# Reset error flag
-	ClearErrors
-	
-	# Read user path
-	!insertmacro ReadUsrPath $RESULT
-    DetailPrint "Read user Path: $RESULT"
-	
-	${Unless} ${Errors} # No errors, so user $SBS_HOME exists
-		${If} $RESULT == "" # If it came back empty.
-			DetailPrint "No user Path available - nothing to do."
-		${Else}
-            ${If} $RESULT un.=~ "%SBS_HOME%\\bin;" # Only need to act if %SBS_HOME%\bin; is in the Path
-    			DetailPrint "Removing %SBS_HOME%\bin; from user path"
-    			
-    			# Reset error flag and clean user Path
-    			ClearErrors
-    			!insertmacro RemoveFromPathString $RESULT "%SBS_HOME%\bin;"
-    			
-    			DetailPrint "DEBUG: User path $$RESULT = "
-    	        DetailPrint "DEBUG: User path  $RESULT"
-    			
-    			${If} $RESULT == ""
-    				!insertmacro RmUsrEnvVar "Path"
-    			${Else}
-    				# Write cleaned Path to registry
-    	            !insertmacro WriteUsrEnvVarExp "Path" $RESULT
-    			${EndIf}
-    			
-    			${If} ${Errors}
-    				DetailPrint "ERROR: The ${INSTALLER_NAME} uninstaller could not clean the user Path. Please clean it manually."
-    			${EndIf}
-            ${Else}
-                DetailPrint "Nothing to remove from user path."
-            ${EndIf}
-		${EndIf}
-		
-	${Else} # No user path
-		DetailPrint "Note: Unable to find user Path environment variable."
-		DetailPrint "Please check that the variable exists and remove %SBS_HOME\bin manually if required."
-	${EndUnless}
-    
-    # Read system path
-    !insertmacro ReadSysPath $RESULT
-    DetailPrint "Read system Path: $RESULT"
-    
-    ${Unless} ${Errors} # No errors, so system path read OK.
-        ${If} $RESULT un.=~ "%SBS_HOME%\\bin;" # Only need to act if %SBS_HOME%\bin; is in the Path 
-        
-            DetailPrint "Removing %SBS_HOME%\bin; from system path"
-            
-            # Reset error flag
-            ClearErrors
-            !insertmacro RemoveFromPathString $RESULT "%SBS_HOME%\bin;"
-            DetailPrint "DEBUG: System Path $$RESULT = "
-            DetailPrint "DEBUG: System Path $RESULT"
-            ClearErrors
-            # Write cleaned PATH to registry
-            !insertmacro WriteSysEnvVarExp "Path" $RESULT
-            
-            ${If} ${Errors}
-                DetailPrint "ERROR: The ${INSTALLER_NAME} uninstaller could not clean the PATH."
-                DetailPrint "Please clean it manually."
-            ${EndIf}
-        ${Else}
-            DetailPrint "Nothing to remove from system path."
-        ${EndIf}
-    ${Else} # Some error reading system path
-        DetailPrint "Note: Unable to read the system Path environment variable."
-        DetailPrint "Please check that the variable and remove %SBS_HOME\bin manually if required."
-    ${EndUnless}
-	
-	##########################################################################
-	# Refresh environment to get changes for SBS_HOME and PATH
-    !insertmacro RefreshEnv
-	
-	# Unload registry plug in
-	${registry::Unload}
-SectionEnd
-
-# Languages
-!insertmacro MUI_LANGUAGE "English"
-
-################################################ End ################################################
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Raptor installer/uninstaller script
+
+# Standard NSIS Library includes 
+!include "MUI2.nsh"
+!include "LogicLib.nsh"
+!include "WinMessages.nsh"
+
+# Extra plugin includes
+!include "nsDialogs.nsh"
+!include "Registry.nsh"
+!include "NSISpcre.nsh"
+!include "Time.nsh"
+
+# Define functions from NSISpcre.nsh 
+!insertmacro REMatches
+!insertmacro un.REMatches
+!insertmacro REQuoteMeta
+
+# Variables
+Var DIALOG
+Var RESULT # Generic variable to obtain results, and immediately thrown away after
+Var RESULT2 # Generic variable to obtain results, and immediately thrown away after
+Var SBS_HOME
+Var USERONLYINSTALL_HWND # HWND of radio button control for user-only installation
+Var ALLUSERSINSTALL_HWND # HWND of radio button control for system installation
+Var NOENVCHANGES_HWND    # HWND of radio button control for file-only installation
+Var USERONLYINSTALL_STATE # State of user-only radio button
+Var ALLUSERSINSTALL_STATE # State of system radio button
+Var NOENVCHANGES_STATE # State of file-only installation radio button
+Var INSTALL_TYPE # Type of installer ("USR" or "SYS")
+
+# Custom includes (depend on above variables so much be here)
+!include "raptorinstallerutils.nsh" # Functions and macros for handling environment variables
+!include "raptorversion.nsh" # Define the RAPTOR_VERSION variable
+
+# Defines
+# !define /date DATE_STAMP "%Y-%m-%d-%H-%M-%S"
+!define INSTALLER_NAME "Raptor v${RAPTOR_VERSION}"
+!define RAPTOR "sbs"
+!define INSTALLER_FILENAME "${RAPTOR}-${RAPTOR_VERSION}.exe"
+!define UNINSTALLER_FILENAME "${RAPTOR}-${RAPTOR_VERSION}-uninstaller.exe"
+
+########################## Attributes ###########################
+# Name of installer executable to create!
+OutFile ${INSTALLER_FILENAME}
+# Name for the installer caption
+Name "Raptor v${RAPTOR_VERSION}"
+
+####################### Generic Behaviour #######################
+# Vista support; use admin in case user decides to install Raptor for all users
+RequestExecutionLevel admin
+# Set XPStyle on
+XPStyle on
+
+###################### Installer Behaviour ######################
+# Warn on Cancel
+!define MUI_ABORTWARNING
+# Abort warning text
+!define MUI_ABORTWARNING_TEXT "Are you sure you want to quit the ${INSTALLER_NAME} installer?"
+# Cancel is default button on cancel dialogue boxes.
+!define MUI_ABORTWARNING_CANCEL_DEFAULT
+# Don't just to final page
+!define MUI_FINISHPAGE_NOAUTOCLOSE
+# Show installer details
+ShowInstDetails show
+
+##################### Pages in the installer #####################
+!insertmacro MUI_PAGE_WELCOME
+# Temporarily useing RELEASE-NOTES.txt as there is not license.txt
+!insertmacro MUI_PAGE_LICENSE ${RAPTOR_LOCATION}\RELEASE-NOTES.txt
+!define MUI_PAGE_HEADER_TEXT "Installation type"
+Page custom UserOrSysInstall UserOrSysInstallLeave
+!define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirLeave # Directory page exit function - disallow spaces in $INSTDIR
+!insertmacro MUI_PAGE_DIRECTORY
+!insertmacro MUI_PAGE_INSTFILES
+!insertmacro MUI_PAGE_FINISH
+
+######################## .onInit function ########################
+Function .onInit
+    StrCpy $INSTDIR "C:\Apps\Raptor"
+FunctionEnd
+
+#################### Sections in the installer ####################
+# "Sections" - i.e. components to install. This installer
+# only has Raptor, so there is no point giving options 
+# to the user.
+Section "Install Raptor" INSTALLRAPTOR
+	
+    StrCpy $SBS_HOME "SBS_HOME"
+	
+    # Install Raptor
+    SetOutPath "$INSTDIR\bin"
+    File /r ${RAPTOR_LOCATION}\bin\*.* 
+    SetOutPath "$INSTDIR\examples"
+    File /r ${RAPTOR_LOCATION}\examples\*.*
+    SetOutPath "$INSTDIR\lib"
+    File /r ${RAPTOR_LOCATION}\lib\*.*
+    SetOutPath "$INSTDIR\python"
+    File /r ${RAPTOR_LOCATION}\python\*.*
+    SetOutPath "$INSTDIR\schema"
+    File /r ${RAPTOR_LOCATION}\schema\*.*
+    SetOutPath "$INSTDIR\win32"
+    File /r ${RAPTOR_LOCATION}\win32\*.*
+    
+    SetOutPath "$INSTDIR"
+    File ${RAPTOR_LOCATION}\RELEASE-NOTES.txt
+    
+    
+    ${Unless} $INSTALL_TYPE == "NO_ENV"
+        # Back up system and user environments before changing them.
+        !insertmacro DefineDateStamp
+        !define SYS_REG_BACKUP_FILE "$INSTDIR\SysEnvBackUpPreInstall-${DATE_STAMP}.reg"
+        !define USR_REG_BACKUP_FILE "$INSTDIR\UsrEnvBackUpPreInstall-${DATE_STAMP}.reg"
+        
+        # Save System Environment just in case.
+        ${registry::SaveKey} "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "${SYS_REG_BACKUP_FILE}" "" "$RESULT"
+        
+        ${If} $RESULT == 0
+            DetailPrint "Successfully backed up system environment in ${SYS_REG_BACKUP_FILE}."
+        ${Else}
+            DetailPrint "Failed to back up system environment due to an unknown error."
+        ${EndIf}
+        
+        # Save user Environment just in case.
+        ${registry::SaveKey} "HKCU\Environment" "${USR_REG_BACKUP_FILE}" "" "$RESULT"
+        
+        ${If} $RESULT == 0
+            DetailPrint "Successfully backed up user environment in ${USR_REG_BACKUP_FILE}."
+        ${Else}
+            DetailPrint "Failed to back up user environment due to an unknown error."
+        ${EndIf}
+    	
+    	# Reset error flag
+    	ClearErrors
+    	
+    	# Write SBS_HOME variable; if it exists, the user will be asked if they want it to be overwritten.
+    	# Read the env var from the appropriate place
+    	!insertmacro ReadEnvVar $SBS_HOME $RESULT
+    	
+    	${Unless} ${Errors} # No errors, so $SBS_HOME exists
+    		DetailPrint "Env Var $SBS_HOME exists with value $RESULT"
+    		# Ask user if they want it replaced. If yes, write it, if no don't write it.
+    		MessageBox MB_YESNO|MB_ICONQUESTION "The ${INSTALLER_NAME} installer has detected that you already have the SBS_HOME environment variable set with value $RESULT. Would you like the installer to overwrite it with the value $INSTDIR? Click yes to over write with value $INSTDIR, and no to leave it as $RESULT." IDYES write_env_var_yes IDNO write_env_var_no
+    	${Else} # No env var named $SBS_HOME
+    		DetailPrint "Env Var $SBS_HOME does not exist!"
+    	${EndUnless}
+    	
+write_env_var_yes:
+    	# Write SBS_HOME to registry
+    	Push "SBS_HOME" # Third on stack
+    	Push "$INSTDIR" # Second on stack
+    	Push "" # First on stack
+    	
+    	# Needs env var name, env var value, then "" on the stack
+    	call WriteEnvVar
+    	
+    	# Prepend PATH with %SBS_HOME%\bin
+    	Push "%SBS_HOME%\bin" # First on stack
+    	call PrependToPath
+    	goto end
+        
+write_env_var_no:
+    	DetailPrint "Not writing the environment variable $SBS_HOME."
+        
+end:
+    ${EndUnless} 
+	
+	# Generate batch file to set environment variables for Raptor
+	StrCpy $RESULT "@REM Environment variables for ${INSTALLER_NAME}$\r$\nset SBS_HOME=$INSTDIR$\r$\nset PATH=%SBS_HOME%\bin;%PATH%$\r$\n"
+	!insertmacro WriteFile "RaptorEnv.bat" "$RESULT"
+SectionEnd
+
+# Finishing up installation.
+Section
+    ${Unless} $INSTALL_TYPE == "NO_ENV"
+    	# Refresh environment to get changes for SBS_HOME and PATH
+        !insertmacro RefreshEnv
+    ${EndUnless}
+	
+	# Write the uninstaller
+	# WriteUninstaller "$INSTDIR\${UNINSTALLER_FILENAME}"
+	WriteUninstaller "$INSTDIR\${UNINSTALLER_FILENAME}"
+	# Unload registry plug in
+	${registry::Unload}
+SectionEnd
+
+# Custom install page to select install type
+Function UserOrSysInstall
+    !insertmacro MUI_HEADER_TEXT "Choose Installation Type" "Choose the type of installation \
+    you would like for your computer."
+    
+	nsDialogs::Create 1018
+	Pop $DIALOG
+	
+	# Exit is unable to create dialog
+	${If} $DIALOG == error
+		Abort
+	${EndIf}
+	
+	# Create second radio button for system install
+	#${NSD_CreateRadioButton} 0 10u 100% 33% "Install Raptor for all users on this computer. \
+    #(Recommended).$\nThis option modifies system wide environment variables."
+	#Pop $ALLUSERSINSTALL_HWND
+    
+    # Create first radio button for user install
+    #${NSD_CreateRadioButton} 0 45u 100% 67% "Install Raptor just for me on this computer.\
+    #$\nThis option modifies only user environment variables."
+    #Pop $USERONLYINSTALL_HWND
+	
+	# Create first radio button for system install
+	${NSD_CreateRadioButton} 0 0% 100% 30% "Install Raptor for all users on this computer. \
+    (Recommended).$\nThis option modifies system wide environment variables."
+	Pop $ALLUSERSINSTALL_HWND
+    
+    # Create second radio button for user install
+    ${NSD_CreateRadioButton} 0 25% 100% 30% "Install Raptor just for me on this computer.\
+    $\nThis option modifies only user environment variables."
+    Pop $USERONLYINSTALL_HWND
+    
+    # Create third radio button for file-only install
+    ${NSD_CreateRadioButton} 0 50% 100% 40% "Install, but do not modify the environment.\
+    $\nThis option only unpacks Raptor's files. A batch file in the installation \ 
+    folder (RaptorEnv.bat) can be used to set Raptor's environment variables in a command prompt."
+    Pop $NOENVCHANGES_HWND
+	
+	# Update page control with previous state, if set.
+	# Initially these will be blank, so set system install to be on by default.
+	${If} $USERONLYINSTALL_STATE == ""
+	${AndIf} $ALLUSERSINSTALL_STATE == ""
+    ${AndIf} $NOENVCHANGES_STATE == ""
+		${NSD_SetState} $ALLUSERSINSTALL_HWND ${BST_CHECKED}
+	${Else} # Previously set, user has returned to this page using "Back" button
+		${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
+			${NSD_SetState} $USERONLYINSTALL_HWND ${BST_CHECKED}
+		${ElseIf} $NOENVCHANGES_STATE == ${BST_CHECKED}
+            ${NSD_SetState} $NOENVCHANGES_HWND ${BST_CHECKED}
+        ${Else}
+			${NSD_SetState} $ALLUSERSINSTALL_HWND ${BST_CHECKED}
+		${EndIf}
+	${EndIf}
+	
+	nsDialogs::Show
+FunctionEnd
+
+# Store the states of the radio buttons once the user has left the page.
+Function UserOrSysInstallLeave
+	${NSD_GetState} $USERONLYINSTALL_HWND $USERONLYINSTALL_STATE
+	${NSD_GetState} $ALLUSERSINSTALL_HWND $ALLUSERSINSTALL_STATE
+    ${NSD_GetState} $NOENVCHANGES_HWND $NOENVCHANGES_STATE
+    
+    # Set the ${INSTALL_TYPE} variable
+    ${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
+        StrCpy $INSTALL_TYPE "USR"
+    ${EndIf}
+    
+    ${If} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
+        StrCpy $INSTALL_TYPE "SYS"
+    ${EndIf}
+    
+    ${If} $NOENVCHANGES_STATE == ${BST_CHECKED}
+        StrCpy $INSTALL_TYPE "NO_ENV"
+    ${EndIf}
+    
+    ${Unless} $INSTALL_TYPE == "USR"
+    ${AndUnless} $INSTALL_TYPE == "SYS"
+    ${AndUnless} $INSTALL_TYPE == "NO_ENV"
+        Abort "Failed to determine installation type.\n\
+        $$INSTALL_TYPE = $\"$INSTALL_TYPE$\"."
+    ${EndUnless} 
+FunctionEnd
+
+Function DirLeave
+	StrCpy $0 " "
+	${REQuoteMeta} $9 $0 # $9 now contains the meta-quoted version of $0
+	${If} $INSTDIR =~ $9
+		MessageBox MB_OK|MB_ICONSTOP "Please choose a directory without a space in it."
+		Abort
+	${EndIf}
+FunctionEnd
+
+########################### Uninstaller #########################
+######################## .onInit function ########################
+Function un.onInit
+	!undef DATE_STAMP
+	!insertmacro DefineDateStamp
+FunctionEnd
+########################### Behaviour ###########################
+# Warn on Cancel
+!define MUI_UNABORTWARNING
+# Abort warning text
+!undef MUI_UNABORTWARNING_TEXT
+!define MUI_UNABORTWARNING_TEXT "Are you sure you want to quit the ${INSTALLER_NAME} uninstaller?"
+# Cancel is default button on cancel dialogue boxes.
+!define MUI_UNABORTWARNING_CANCEL_DEFAULT
+# Don't just to final page
+!define MUI_UNFINISHPAGE_NOAUTOCLOSE
+# Show uninstaller details
+ShowUninstDetails show
+
+#################### Pages in the uninstaller ####################
+!insertmacro MUI_UNPAGE_WELCOME
+!insertmacro MUI_UNPAGE_CONFIRM
+!insertmacro MUI_UNPAGE_INSTFILES
+!insertmacro MUI_UNPAGE_FINISH
+
+################## Sections in the uninstaller ##################
+# There is only one section in the uninstaller.
+Section "Uninstall"
+    # Delete Raptor
+    RmDir /r $INSTDIR\bin
+    RmDir /r $INSTDIR\examples
+    RmDir /r $INSTDIR\lib
+    RmDir /r $INSTDIR\python
+    RmDir /r $INSTDIR\schema
+    RmDir /r $INSTDIR\win32
+    Delete $INSTDIR\RELEASE-NOTES.txt
+    Delete $INSTDIR\RaptorEnv.bat
+    Delete $INSTDIR\${UNINSTALLER_FILENAME}
+    
+    !undef SYS_REG_BACKUP_FILE
+    !undef USR_REG_BACKUP_FILE
+    !define SYS_REG_BACKUP_FILE "$INSTDIR\SysEnvBackUpPreUninstall-${DATE_STAMP}.reg"
+    !define USR_REG_BACKUP_FILE "$INSTDIR\UsrEnvBackUpPreUninstall-${DATE_STAMP}.reg"
+    
+    # Save System Environment just in case.
+    ${registry::SaveKey} "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "${SYS_REG_BACKUP_FILE}" "" "$RESULT"
+    
+    ${If} $RESULT == 0
+        DetailPrint "Successfully backed up system environment in ${SYS_REG_BACKUP_FILE}."
+    ${Else}
+        DetailPrint "Failed to back up system environment due to an unknown error."
+    ${EndIf}
+    
+    # Save user Environment just in case.
+    ${registry::SaveKey} "HKCU\Environment" "${USR_REG_BACKUP_FILE}" "" "$RESULT"
+    
+    ${If} $RESULT == 0
+        DetailPrint "Successfully backed up user environment in ${USR_REG_BACKUP_FILE}."
+    ${Else}
+        DetailPrint "Failed to back up user environment due to an unknown error."
+    ${EndIf}
+	
+	# Reset error flag
+	ClearErrors
+	
+	# Read user SBS_HOME
+	!insertmacro ReadUsrEnvVar "SBS_HOME" $RESULT
+	
+	${Unless} ${Errors} # No errors, so user %SBS_HOME% exists
+		DetailPrint "Removing user environment variable SBS_HOME ($RESULT)"
+		
+		# Reset error flag
+		ClearErrors
+		!insertmacro RmUsrEnvVar "SBS_HOME"
+		
+		${If} ${Errors}
+			DetailPrint "ERROR: The ${INSTALLER_NAME} uninstaller could not remove the user environment variable SBS_HOME."
+			DetailPrint "Please remove it manually."
+		${EndIf}
+		
+	${Else} # No env var named $SBS_HOME
+		DetailPrint "Note: Unable to find user environment variable SBS_HOME."
+		DetailPrint "If required, this variable may need to be removed manually."
+	${EndUnless}
+	
+	# Reset error flag
+	ClearErrors
+	
+	# Read system SBS_HOME
+	!insertmacro ReadSysEnvVar "SBS_HOME" $RESULT
+	
+	${Unless} ${Errors} # No errors, so system $SBS_HOME exists
+		DetailPrint "Removing system environment variable SBS_HOME ($RESULT)"
+		
+		# Reset error flag
+		ClearErrors
+		!insertmacro RmSysEnvVar "SBS_HOME"
+		
+		${If} ${Errors}
+			DetailPrint "ERROR: The ${INSTALLER_NAME} uninstaller could not remove the \
+            System environment variable SBS_HOME."
+			DetailPrint "Please remove it manually."
+		${EndIf}
+		
+	${Else} # No env var named $SBS_HOME
+		DetailPrint "Note: Unable to find system environment variable SBS_HOME."
+		DetailPrint "If required, this variable may need to be removed manually."
+	${EndUnless}
+	
+	################################# Clean up the path env vars #################################
+	# Reset error flag
+	ClearErrors
+	
+	# Read user path
+	!insertmacro ReadUsrPath $RESULT
+    DetailPrint "Read user Path: $RESULT"
+	
+	${Unless} ${Errors} # No errors, so user $SBS_HOME exists
+		${If} $RESULT == "" # If it came back empty.
+			DetailPrint "No user Path available - nothing to do."
+		${Else}
+            ${If} $RESULT un.=~ "%SBS_HOME%\\bin;" # Only need to act if %SBS_HOME%\bin; is in the Path
+    			DetailPrint "Removing %SBS_HOME%\bin; from user path"
+    			
+    			# Reset error flag and clean user Path
+    			ClearErrors
+    			!insertmacro RemoveFromPathString $RESULT "%SBS_HOME%\bin;"
+    			
+    			DetailPrint "DEBUG: User path $$RESULT = "
+    	        DetailPrint "DEBUG: User path  $RESULT"
+    			
+    			${If} $RESULT == ""
+    				!insertmacro RmUsrEnvVar "Path"
+    			${Else}
+    				# Write cleaned Path to registry
+    	            !insertmacro WriteUsrEnvVarExp "Path" $RESULT
+    			${EndIf}
+    			
+    			${If} ${Errors}
+    				DetailPrint "ERROR: The ${INSTALLER_NAME} uninstaller could not clean the user Path. Please clean it manually."
+    			${EndIf}
+            ${Else}
+                DetailPrint "Nothing to remove from user path."
+            ${EndIf}
+		${EndIf}
+		
+	${Else} # No user path
+		DetailPrint "Note: Unable to find user Path environment variable."
+		DetailPrint "Please check that the variable exists and remove %SBS_HOME\bin manually if required."
+	${EndUnless}
+    
+    # Read system path
+    !insertmacro ReadSysPath $RESULT
+    DetailPrint "Read system Path: $RESULT"
+    
+    ${Unless} ${Errors} # No errors, so system path read OK.
+        ${If} $RESULT un.=~ "%SBS_HOME%\\bin;" # Only need to act if %SBS_HOME%\bin; is in the Path 
+        
+            DetailPrint "Removing %SBS_HOME%\bin; from system path"
+            
+            # Reset error flag
+            ClearErrors
+            !insertmacro RemoveFromPathString $RESULT "%SBS_HOME%\bin;"
+            DetailPrint "DEBUG: System Path $$RESULT = "
+            DetailPrint "DEBUG: System Path $RESULT"
+            ClearErrors
+            # Write cleaned PATH to registry
+            !insertmacro WriteSysEnvVarExp "Path" $RESULT
+            
+            ${If} ${Errors}
+                DetailPrint "ERROR: The ${INSTALLER_NAME} uninstaller could not clean the PATH."
+                DetailPrint "Please clean it manually."
+            ${EndIf}
+        ${Else}
+            DetailPrint "Nothing to remove from system path."
+        ${EndIf}
+    ${Else} # Some error reading system path
+        DetailPrint "Note: Unable to read the system Path environment variable."
+        DetailPrint "Please check that the variable and remove %SBS_HOME\bin manually if required."
+    ${EndUnless}
+	
+	##########################################################################
+	# Refresh environment to get changes for SBS_HOME and PATH
+    !insertmacro RefreshEnv
+	
+	# Unload registry plug in
+	${registry::Unload}
+SectionEnd
+
+# Languages
+!insertmacro MUI_LANGUAGE "English"
+
+################################################ End ################################################