sbsv2/raptor/util/install-windows/raptorinstallerutils.nsh
changeset 3 e1eecf4d390d
parent 0 044383f39525
--- a/sbsv2/raptor/util/install-windows/raptorinstallerutils.nsh	Wed Oct 28 14:39:48 2009 +0000
+++ b/sbsv2/raptor/util/install-windows/raptorinstallerutils.nsh	Mon Nov 16 09:46:46 2009 +0000
@@ -1,243 +1,243 @@
-# 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 header file
-
-!include "WordFunc.nsh"
-
-# Time macros
-!macro DefineDateStamp
-	${time::GetLocalTime} $RESULT
-	${time::TimeString} "$RESULT" $0 $1 $2 $3 $4 $5
-	!define DATE_STAMP "$2-$1-$0-$3-$4-$5"
-!macroend
-
-# Env var manipulation macros
-
-# Macro to refresh the computer's environment by sending Windows the
-# WM_WININICHANGE message so that it re-reads the environment changes
-# the installer has made.
-!macro RefreshEnv
-	DetailPrint "Refreshing your computer's environment..."
-	SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" $RESULT /TIMEOUT=5000
-	DetailPrint "Done."
-!macroend
-
-# Sets ${RESULT} to value of user env var named ${VARNAME}
-!macro ReadUsrEnvVar VARNAME RESULT
-	ReadRegStr ${RESULT} HKCU "Environment" ${VARNAME}
-!macroend
-
-# Sets ${RESULT} to value of system env var named ${VARNAME}
-!macro ReadSysEnvVar VARNAME RESULT
-	ReadRegStr ${RESULT} HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME}
-!macroend
-
-# Read the env var from the appropriate place
-!macro ReadEnvVar VARNAME RESULT
-	${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
-		# User env var
-		!insertmacro ReadUsrEnvVar ${VARNAME} ${RESULT}
-	${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
-		# System env var
-		!insertmacro ReadSysEnvVar ${VARNAME} ${RESULT}
-	${Else}
-		# Something has gone wrong!
-		MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)."
-	${EndIf}
-!macroend
-
-# Read the user Path
-!macro ReadUsrPath OUTPUT
-	# Reset error flag
-	ClearErrors
-    !insertmacro ReadUsrEnvVar "Path" ${OUTPUT}
-    
-	${If} ${Errors}
-		DetailPrint "User has no Path variable."
-		StrCpy "${OUTPUT}" ""
-	${EndIf}
-!macroend
-
-# Read the user Path
-!macro ReadSysPath OUTPUT
-	# Reset error flag
-	ClearErrors
-	!insertmacro ReadSysEnvVar "Path" ${OUTPUT}
-!macroend
-
-# Read the Path (installer only).
-!macro ReadPath OUTPUT
-${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
-	# User env var
-	!insertmacro ReadUsrPath ${OUTPUT}
-${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
-	# System env var
-	!insertmacro ReadSysPath ${OUTPUT}
-${Else}
-	# Something has gone wrong!
-	MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)."
-${EndIf}
-!macroend
-
-# Writes a string user environment variable to the Registry
-# DO NOT USE FOR WRITING THE PATH ENVIRONMENT VARIABLE. USE THE BELOW MARCOS!
-!macro WriteUsrEnvVar VARNAME VALUE
-	WriteRegStr HKCU "Environment" ${VARNAME} ${VALUE}
-!macroend
-
-# Writes a string system environment variable to the Registry
-# DO NOT USE FOR WRITING THE PATH ENVIRONMENT VARIABLE. USE THE BELOW MARCOS!
-!macro WriteSysEnvVar VARNAME VALUE
-	WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME} ${VALUE}
-!macroend
-
-# Use the following for PATH env var that can expand variables it contains, e.g.
-# Something like 
-# %SBS_HOME%;C:\Windows...
-# should be written to the registry
-# SBS_HOME must NOT be an "expandable string"; in fact expandable strings don't work recursively
-
-# Writes an expandable string user environment variable to the Registry; mostly used for PATH
-!macro WriteUsrEnvVarExp VARNAME VALUE
-	WriteRegExpandStr HKCU "Environment" ${VARNAME} ${VALUE}
-!macroend
-
-# Writes an expandable string system environment variable to the Registry; mostly used for PATH
-!macro WriteSysEnvVarExp VARNAME VALUE
-	WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME} ${VALUE}
-!macroend
-
-# Deletes a user environment variable from the Registry
-!macro RmUsrEnvVar VARNAME
-	DeleteRegValue HKCU "Environment" ${VARNAME}
-!macroend
-
-# Deletes a system environment variable from the Registry
-!macro RmSysEnvVar VARNAME
-	DeleteRegValue HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME}
-!macroend
-
-# Push env var name, value of env var, and either "" (for normal string env var) 
-# or "exp" (for expandable env var) onto stack before calling this function
-# in this order
-Function WriteEnvVar
-	pop $2 # Expandable string or not?
-	pop $1 # Env var value
-	pop $0 # Env var name
-		
-	DetailPrint "Going to write evn var $0, with value $1, expandable: $2."
-	
-	# Reset error flag
-	ClearErrors
-	
-	${If} $2 == "exp" # Expandable string env var
-		# Write the env var to the appropriate place
-		${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
-			DetailPrint "DEBUG $$0 $$1 = $0 $1"
-			# User env var
-			!insertmacro WriteUsrEnvVarExp $0 $1
-		${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
-			DetailPrint "DEBUG $$0 $$1 = $0 $1"
-			# System env var
-			!insertmacro WriteSysEnvVarExp $0 $1
-		${Else}
-			# Something has gone wrong!
-			MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)."
-		${EndIf}
-	${Else} # Normal string env var
-		# Write the env var to the appropriate place
-		${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
-			DetailPrint "DEBUG $$0 $$1 = $0 $1"
-			# User env var
-			!insertmacro WriteUsrEnvVar $0 $1
-		${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
-			DetailPrint "DEBUG $$0 $$1 = $0 $1"
-			# System env var
-			!insertmacro WriteSysEnvVar $0 $1
-		${Else}
-			# Something has gone wrong!
-			MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)."
-		${EndIf}
-	${EndIf}
-FunctionEnd
-
-# Prepend the PATH env var with the given string. User/system path is determined using
-# other function.
-Function PrependToPath
-	pop $0 # String to prepend to PATH
-		
-	DetailPrint "Going to prepend PATH with $0."
-	
-	# Reset error flag
-	ClearErrors
-	
-	# Read Path
-	!insertmacro ReadPath $RESULT
-	
-	${Unless} ${Errors} # If no errors
-		${REQuoteMeta} $9 $0 # $9 now contains the meta-quoted version of $0
-		${If} $RESULT !~ $9 # If Path doesn't contain string to add
-			StrLen $RESULT2 "$0;$RESULT"
-			# Warn is Path might be "too" long for the Windows registry.
-			${If} $RESULT2 > 1023
-				DetailPrint "Note: adding %SBS_HOME%\bin; to the start of your Path..."
-				DetailPrint "... will result in a string longer than 1023 characters..."
-				DetailPrint "... being written to your registry. Certain versions of Windows..."
-				DetailPrint "... cannot handle a string that long in the registry. The installer..."
-				DetailPrint "... will continue writing to the registry. However, a back up of..."
-				DetailPrint "... your full environment has been created in your installation directory ..."
-				DetailPrint "... should anything go wrong which can be used to restore your previous Path."
-			${EndIf}
-			
-			Push "Path" # Third on stack
-			Push "$0;$RESULT" # Second on stack
-			Push "exp" # First on stack
-			# Write expandable string to registry
-			call WriteEnvVar
-		${EndIf}
-	${Else}
-		DetailPrint "Error: failed to read Path environment variable."
-	${EndUnless}
-FunctionEnd
-
-# Remove the string STR from the string PATH.
-!macro RemoveFromPathString PATH STR
-	DetailPrint "Going to remove ${STR} from ${PATH}."
-	${WordReplace} "${PATH}" "${STR}" "" "+" $RESULT2
-	DetailPrint "Debug: Replaced ${STR} in RESULT2 = [$RESULT2]"
-	StrCpy ${PATH} "$RESULT2"
-	
-	${WordReplace} "${PATH}" ";;" ";" "+" $RESULT2
-	DetailPrint "Debug: Replaced ;; in RESULT2 = [$RESULT2]"
-	StrCpy ${PATH} $RESULT2
-!macroend
-
-################### Miscellaneous utilities
-# WriteFile - writes a file with given contents
-# FILENAME - full path to file (all directories in path must exist)
-# CONTENTS - string to write to the file.
-!macro WriteFile FILENAME CONTENTS
-	DetailPrint "Creating batch file for setting Raptor's environment..."
-	ClearErrors
-	FileOpen $0 ${FILENAME} w
-	${Unless} ${Errors}
-		FileWrite $0 "${CONTENTS}"
-		FileClose $0
-		DetailPrint "Done."		
-	${Else}
-		DetailPrint "Error: failed to write RaptorEnv.bat."
-	${EndUnless}
-!macroend
-
-################################################ 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 header file
+
+!include "WordFunc.nsh"
+
+# Time macros
+!macro DefineDateStamp
+	${time::GetLocalTime} $RESULT
+	${time::TimeString} "$RESULT" $0 $1 $2 $3 $4 $5
+	!define DATE_STAMP "$2-$1-$0-$3-$4-$5"
+!macroend
+
+# Env var manipulation macros
+
+# Macro to refresh the computer's environment by sending Windows the
+# WM_WININICHANGE message so that it re-reads the environment changes
+# the installer has made.
+!macro RefreshEnv
+	DetailPrint "Refreshing your computer's environment..."
+	SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" $RESULT /TIMEOUT=5000
+	DetailPrint "Done."
+!macroend
+
+# Sets ${RESULT} to value of user env var named ${VARNAME}
+!macro ReadUsrEnvVar VARNAME RESULT
+	ReadRegStr ${RESULT} HKCU "Environment" ${VARNAME}
+!macroend
+
+# Sets ${RESULT} to value of system env var named ${VARNAME}
+!macro ReadSysEnvVar VARNAME RESULT
+	ReadRegStr ${RESULT} HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME}
+!macroend
+
+# Read the env var from the appropriate place
+!macro ReadEnvVar VARNAME RESULT
+	${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
+		# User env var
+		!insertmacro ReadUsrEnvVar ${VARNAME} ${RESULT}
+	${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
+		# System env var
+		!insertmacro ReadSysEnvVar ${VARNAME} ${RESULT}
+	${Else}
+		# Something has gone wrong!
+		MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)."
+	${EndIf}
+!macroend
+
+# Read the user Path
+!macro ReadUsrPath OUTPUT
+	# Reset error flag
+	ClearErrors
+    !insertmacro ReadUsrEnvVar "Path" ${OUTPUT}
+    
+	${If} ${Errors}
+		DetailPrint "User has no Path variable."
+		StrCpy "${OUTPUT}" ""
+	${EndIf}
+!macroend
+
+# Read the user Path
+!macro ReadSysPath OUTPUT
+	# Reset error flag
+	ClearErrors
+	!insertmacro ReadSysEnvVar "Path" ${OUTPUT}
+!macroend
+
+# Read the Path (installer only).
+!macro ReadPath OUTPUT
+${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
+	# User env var
+	!insertmacro ReadUsrPath ${OUTPUT}
+${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
+	# System env var
+	!insertmacro ReadSysPath ${OUTPUT}
+${Else}
+	# Something has gone wrong!
+	MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)."
+${EndIf}
+!macroend
+
+# Writes a string user environment variable to the Registry
+# DO NOT USE FOR WRITING THE PATH ENVIRONMENT VARIABLE. USE THE BELOW MARCOS!
+!macro WriteUsrEnvVar VARNAME VALUE
+	WriteRegStr HKCU "Environment" ${VARNAME} ${VALUE}
+!macroend
+
+# Writes a string system environment variable to the Registry
+# DO NOT USE FOR WRITING THE PATH ENVIRONMENT VARIABLE. USE THE BELOW MARCOS!
+!macro WriteSysEnvVar VARNAME VALUE
+	WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME} ${VALUE}
+!macroend
+
+# Use the following for PATH env var that can expand variables it contains, e.g.
+# Something like 
+# %SBS_HOME%;C:\Windows...
+# should be written to the registry
+# SBS_HOME must NOT be an "expandable string"; in fact expandable strings don't work recursively
+
+# Writes an expandable string user environment variable to the Registry; mostly used for PATH
+!macro WriteUsrEnvVarExp VARNAME VALUE
+	WriteRegExpandStr HKCU "Environment" ${VARNAME} ${VALUE}
+!macroend
+
+# Writes an expandable string system environment variable to the Registry; mostly used for PATH
+!macro WriteSysEnvVarExp VARNAME VALUE
+	WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME} ${VALUE}
+!macroend
+
+# Deletes a user environment variable from the Registry
+!macro RmUsrEnvVar VARNAME
+	DeleteRegValue HKCU "Environment" ${VARNAME}
+!macroend
+
+# Deletes a system environment variable from the Registry
+!macro RmSysEnvVar VARNAME
+	DeleteRegValue HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ${VARNAME}
+!macroend
+
+# Push env var name, value of env var, and either "" (for normal string env var) 
+# or "exp" (for expandable env var) onto stack before calling this function
+# in this order
+Function WriteEnvVar
+	pop $2 # Expandable string or not?
+	pop $1 # Env var value
+	pop $0 # Env var name
+		
+	DetailPrint "Going to write evn var $0, with value $1, expandable: $2."
+	
+	# Reset error flag
+	ClearErrors
+	
+	${If} $2 == "exp" # Expandable string env var
+		# Write the env var to the appropriate place
+		${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
+			DetailPrint "DEBUG $$0 $$1 = $0 $1"
+			# User env var
+			!insertmacro WriteUsrEnvVarExp $0 $1
+		${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
+			DetailPrint "DEBUG $$0 $$1 = $0 $1"
+			# System env var
+			!insertmacro WriteSysEnvVarExp $0 $1
+		${Else}
+			# Something has gone wrong!
+			MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)."
+		${EndIf}
+	${Else} # Normal string env var
+		# Write the env var to the appropriate place
+		${If} $USERONLYINSTALL_STATE == ${BST_CHECKED}
+			DetailPrint "DEBUG $$0 $$1 = $0 $1"
+			# User env var
+			!insertmacro WriteUsrEnvVar $0 $1
+		${ElseIf} $ALLUSERSINSTALL_STATE == ${BST_CHECKED}
+			DetailPrint "DEBUG $$0 $$1 = $0 $1"
+			# System env var
+			!insertmacro WriteSysEnvVar $0 $1
+		${Else}
+			# Something has gone wrong!
+			MessageBox MB_OK|MB_ICONSTOP "Failed to determine installation type (Current User or All Users)."
+		${EndIf}
+	${EndIf}
+FunctionEnd
+
+# Prepend the PATH env var with the given string. User/system path is determined using
+# other function.
+Function PrependToPath
+	pop $0 # String to prepend to PATH
+		
+	DetailPrint "Going to prepend PATH with $0."
+	
+	# Reset error flag
+	ClearErrors
+	
+	# Read Path
+	!insertmacro ReadPath $RESULT
+	
+	${Unless} ${Errors} # If no errors
+		${REQuoteMeta} $9 $0 # $9 now contains the meta-quoted version of $0
+		${If} $RESULT !~ $9 # If Path doesn't contain string to add
+			StrLen $RESULT2 "$0;$RESULT"
+			# Warn is Path might be "too" long for the Windows registry.
+			${If} $RESULT2 > 1023
+				DetailPrint "Note: adding %SBS_HOME%\bin; to the start of your Path..."
+				DetailPrint "... will result in a string longer than 1023 characters..."
+				DetailPrint "... being written to your registry. Certain versions of Windows..."
+				DetailPrint "... cannot handle a string that long in the registry. The installer..."
+				DetailPrint "... will continue writing to the registry. However, a back up of..."
+				DetailPrint "... your full environment has been created in your installation directory ..."
+				DetailPrint "... should anything go wrong which can be used to restore your previous Path."
+			${EndIf}
+			
+			Push "Path" # Third on stack
+			Push "$0;$RESULT" # Second on stack
+			Push "exp" # First on stack
+			# Write expandable string to registry
+			call WriteEnvVar
+		${EndIf}
+	${Else}
+		DetailPrint "Error: failed to read Path environment variable."
+	${EndUnless}
+FunctionEnd
+
+# Remove the string STR from the string PATH.
+!macro RemoveFromPathString PATH STR
+	DetailPrint "Going to remove ${STR} from ${PATH}."
+	${WordReplace} "${PATH}" "${STR}" "" "+" $RESULT2
+	DetailPrint "Debug: Replaced ${STR} in RESULT2 = [$RESULT2]"
+	StrCpy ${PATH} "$RESULT2"
+	
+	${WordReplace} "${PATH}" ";;" ";" "+" $RESULT2
+	DetailPrint "Debug: Replaced ;; in RESULT2 = [$RESULT2]"
+	StrCpy ${PATH} $RESULT2
+!macroend
+
+################### Miscellaneous utilities
+# WriteFile - writes a file with given contents
+# FILENAME - full path to file (all directories in path must exist)
+# CONTENTS - string to write to the file.
+!macro WriteFile FILENAME CONTENTS
+	DetailPrint "Creating batch file for setting Raptor's environment..."
+	ClearErrors
+	FileOpen $0 ${FILENAME} w
+	${Unless} ${Errors}
+		FileWrite $0 "${CONTENTS}"
+		FileClose $0
+		DetailPrint "Done."		
+	${Else}
+		DetailPrint "Error: failed to write RaptorEnv.bat."
+	${EndUnless}
+!macroend
+
+################################################ End ################################################