--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/util/install-windows/raptorinstallerscript.nsi Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +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 ################################################