diff -r c7c26511138f -r 360bd6b35136 sbsv2/raptor/util/install-windows/raptorinstallerutils.nsh --- a/sbsv2/raptor/util/install-windows/raptorinstallerutils.nsh Wed Jun 16 16:51:40 2010 +0300 +++ b/sbsv2/raptor/util/install-windows/raptorinstallerutils.nsh Wed Jun 23 16:56:47 2010 +0800 @@ -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 ################################################