/indra/newview/installers/windows/installer_template.nsi
Unknown | 1036 lines | 849 code | 187 blank | 0 comment | 0 complexity | e29fef6e96b4a72971eb5032ea81bc21 MD5 | raw file
Possible License(s): LGPL-2.1
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; secondlife setup.nsi
- ;; Copyright 2004-2011, Linden Research, Inc.
- ;;
- ;; This library is free software; you can redistribute it and/or
- ;; modify it under the terms of the GNU Lesser General Public
- ;; License as published by the Free Software Foundation;
- ;; version 2.1 of the License only.
- ;;
- ;; This library is distributed in the hope that it will be useful,
- ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
- ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- ;; Lesser General Public License for more details.
- ;;
- ;; You should have received a copy of the GNU Lesser General Public
- ;; License along with this library; if not, write to the Free Software
- ;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- ;;
- ;; Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- ;;
- ;; NSIS Unicode 2.38.1 or higher required
- ;; http://www.scratchpaper.com/
- ;;
- ;; Author: James Cook, Don Kjer, Callum Prentice
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Compiler flags
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- SetOverwrite on ; overwrite files
- SetCompress auto ; compress iff saves space
- SetCompressor /solid lzma ; compress whole installer as one block
- SetDatablockOptimize off ; only saves us 0.1%, not worth it
- XPStyle on ; add an XP manifest to the installer
- RequestExecutionLevel admin ; on Vista we must be admin because we write to Program Files
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Project flags
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- %%VERSION%%
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; - language files - one for each language (or flavor thereof)
- ;; (these files are in the same place as the nsi template but the python script generates a new nsi file in the
- ;; application directory so we have to add a path to these include files)
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- !include "%%SOURCE%%\installers\windows\lang_da.nsi"
- !include "%%SOURCE%%\installers\windows\lang_de.nsi"
- !include "%%SOURCE%%\installers\windows\lang_en-us.nsi"
- !include "%%SOURCE%%\installers\windows\lang_es.nsi"
- !include "%%SOURCE%%\installers\windows\lang_fr.nsi"
- !include "%%SOURCE%%\installers\windows\lang_ja.nsi"
- !include "%%SOURCE%%\installers\windows\lang_it.nsi"
- !include "%%SOURCE%%\installers\windows\lang_pl.nsi"
- !include "%%SOURCE%%\installers\windows\lang_pt-br.nsi"
- !include "%%SOURCE%%\installers\windows\lang_ru.nsi"
- !include "%%SOURCE%%\installers\windows\lang_tr.nsi"
- !include "%%SOURCE%%\installers\windows\lang_zh.nsi"
-
- # *TODO: Move these into the language files themselves
- LangString LanguageCode ${LANG_DANISH} "da"
- LangString LanguageCode ${LANG_GERMAN} "de"
- LangString LanguageCode ${LANG_ENGLISH} "en"
- LangString LanguageCode ${LANG_SPANISH} "es"
- LangString LanguageCode ${LANG_FRENCH} "fr"
- LangString LanguageCode ${LANG_JAPANESE} "ja"
- LangString LanguageCode ${LANG_ITALIAN} "it"
- LangString LanguageCode ${LANG_POLISH} "pl"
- LangString LanguageCode ${LANG_PORTUGUESEBR} "pt"
- LangString LanguageCode ${LANG_RUSSIAN} "ru"
- LangString LanguageCode ${LANG_TURKISH} "tr"
- LangString LanguageCode ${LANG_TRADCHINESE} "zh"
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Tweak for different servers/builds (this placeholder is replaced by viewer_manifest.py)
- ;; For example:
- ;; !define INSTFLAGS "%(flags)s"
- ;; !define INSTNAME "SecondLife%(grid_caps)s"
- ;; !define SHORTCUT "Second Life (%(grid_caps)s)"
- ;; !define URLNAME "secondlife%(grid)s"
- ;; !define UNINSTALL_SETTINGS 1
-
- %%GRID_VARS%%
-
- Name ${INSTNAME}
-
- SubCaption 0 $(LicenseSubTitleSetup) ; override "license agreement" text
-
- BrandingText " " ; bottom of window text
- Icon %%SOURCE%%\installers\windows\install_icon.ico
- UninstallIcon %%SOURCE%%\installers\windows\uninstall_icon.ico
- WindowIcon on ; show our icon in left corner
- BGGradient off ; no big background window
- CRCCheck on ; make sure CRC is OK
- InstProgressFlags smooth colored ; new colored smooth look
- ShowInstDetails nevershow ; no details, no "show" button
- SetOverwrite on ; stomp files by default
- AutoCloseWindow true ; after all files install, close window
-
- InstallDir "$PROGRAMFILES\${INSTNAME}"
- InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" ""
- DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
- Page directory dirPre
- Page instfiles
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Variables
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Var INSTPROG
- Var INSTEXE
- Var INSTFLAGS
- Var INSTSHORTCUT
- Var COMMANDLINE ; command line passed to this installer, set in .onInit
- Var SHORTCUT_LANG_PARAM ; "--set InstallLanguage de", passes language to viewer
- Var SKIP_DIALOGS ; set from command line in .onInit. autoinstall
- ; GUI and the defaults.
- Var DO_UNINSTALL_V2 ; If non-null, path to a previous Viewer 2 installation that will be uninstalled.
-
- ;;; Function definitions should go before file includes, because calls to
- ;;; DLLs like LangDLL trigger an implicit file include, so if that call is at
- ;;; the end of this script NSIS has to decompress the whole installer before
- ;;; it can call the DLL function. JC
-
- !include "FileFunc.nsh" ; For GetParameters, GetOptions
- !insertmacro GetParameters
- !insertmacro GetOptions
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; After install completes, launch app
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function .onInstSuccess
- Push $R0 # Option value, unused
-
- StrCmp $SKIP_DIALOGS "true" label_launch
-
- ${GetOptions} $COMMANDLINE "/AUTOSTART" $R0
- # If parameter was there (no error) just launch
- # Otherwise ask
- IfErrors label_ask_launch label_launch
-
- label_ask_launch:
- # Don't launch by default when silent
- IfSilent label_no_launch
- MessageBox MB_YESNO $(InstSuccesssQuestion) \
- IDYES label_launch IDNO label_no_launch
-
- label_launch:
- # Assumes SetOutPath $INSTDIR
- Exec '"$INSTDIR\$INSTEXE" $INSTFLAGS $SHORTCUT_LANG_PARAM'
- label_no_launch:
- Pop $R0
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Pre-directory page callback
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function dirPre
- StrCmp $SKIP_DIALOGS "true" 0 +2
- Abort
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Make sure we're not on Windows 98 / ME
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function CheckWindowsVersion
- DetailPrint "Checking Windows version..."
- Call GetWindowsVersion
- Pop $R0
- ; Just get first two characters, ignore 4.0 part of "NT 4.0"
- StrCpy $R0 $R0 2
- ; Blacklist certain OS versions
- StrCmp $R0 "95" win_ver_bad
- StrCmp $R0 "98" win_ver_bad
- StrCmp $R0 "ME" win_ver_bad
- StrCmp $R0 "NT" win_ver_bad
- Return
- win_ver_bad:
- StrCmp $SKIP_DIALOGS "true" +2 ; If skip_dialogs is set just install
- MessageBox MB_YESNO $(CheckWindowsVersionMB) IDNO win_ver_abort
- Return
- win_ver_abort:
- Quit
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Make sure the user can install/uninstall
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function CheckIfAdministrator
- DetailPrint $(CheckAdministratorInstDP)
- UserInfo::GetAccountType
- Pop $R0
- StrCmp $R0 "Admin" lbl_is_admin
- MessageBox MB_OK $(CheckAdministratorInstMB)
- Quit
- lbl_is_admin:
- Return
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function un.CheckIfAdministrator
- DetailPrint $(CheckAdministratorUnInstDP)
- UserInfo::GetAccountType
- Pop $R0
- StrCmp $R0 "Admin" lbl_is_admin
- MessageBox MB_OK $(CheckAdministratorUnInstMB)
- Quit
- lbl_is_admin:
- Return
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Checks to see if the current version has already been installed (according to the registry).
- ; If it has, allow user to bail out of install process.
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function CheckIfAlreadyCurrent
- Push $0
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version"
- StrCmp $0 ${VERSION_LONG} 0 continue_install
- StrCmp $SKIP_DIALOGS "true" continue_install
- MessageBox MB_OKCANCEL $(CheckIfCurrentMB) /SD IDOK IDOK continue_install
- Quit
- continue_install:
- Pop $0
- Return
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Checks for CPU valid (must have SSE2 support)
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function CheckCPUFlags
- Call GetWindowsVersion
- Pop $R0
- StrCmp $R0 "2000" OK_SSE ; sse check not available on win2k.
-
- Push $1
- System::Call 'kernel32::IsProcessorFeaturePresent(i) i(10) .r1'
- IntCmp $1 1 OK_SSE
- MessageBox MB_OKCANCEL $(MissingSSE2) /SD IDOK IDOK OK_SSE
- Quit
-
- OK_SSE:
- Pop $1
- Return
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Close the program, if running. Modifies no variables.
- ; Allows user to bail out of install process.
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function CloseSecondLife
- Push $0
- FindWindow $0 "Second Life" ""
- IntCmp $0 0 DONE
-
- StrCmp $SKIP_DIALOGS "true" CLOSE
- MessageBox MB_OKCANCEL $(CloseSecondLifeInstMB) IDOK CLOSE IDCANCEL CANCEL_INSTALL
-
- CANCEL_INSTALL:
- Quit
-
- CLOSE:
- DetailPrint $(CloseSecondLifeInstDP)
- SendMessage $0 16 0 0
-
- LOOP:
- FindWindow $0 "Second Life" ""
- IntCmp $0 0 DONE
- Sleep 500
- Goto LOOP
-
- DONE:
- Pop $0
- Return
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Test our connection to secondlife.com
- ; Also allows us to count attempted installs by examining web logs.
- ; *TODO: Return current SL version info and have installer check
- ; if it is up to date.
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function CheckNetworkConnection
- Push $0
- Push $1
- Push $2 # Option value for GetOptions
- DetailPrint $(CheckNetworkConnectionDP)
- ; Look for a tag value from the stub installer, used for statistics
- ; to correlate installs. Default to "" if not found on command line.
- StrCpy $2 ""
- ${GetOptions} $COMMANDLINE "/STUBTAG=" $2
- GetTempFileName $0
- !define HTTP_TIMEOUT 5000 ; milliseconds
- ; Don't show secondary progress bar, this will be quick.
- NSISdl::download_quiet \
- /TIMEOUT=${HTTP_TIMEOUT} \
- "http://install.secondlife.com/check/?stubtag=$2&version=${VERSION_LONG}" \
- $0
- Pop $1 ; Return value, either "success", "cancel" or an error message
- ; MessageBox MB_OK "Download result: $1"
- ; Result ignored for now
- ; StrCmp $1 "success" +2
- ; DetailPrint "Connection failed: $1"
- Delete $0 ; temporary file
- Pop $2
- Pop $1
- Pop $0
- Return
- FunctionEnd
-
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Function CheckWillUninstallV2
- ;
- ; If we are being called through auto-update, we need to uninstall any
- ; existing V2 installation. Otherwise, we wind up with
- ; SecondLifeViewer2 and SecondLifeViewer installations existing side
- ; by side no indication which to use.
- ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function CheckWillUninstallV2
-
- StrCpy $DO_UNINSTALL_V2 ""
-
- StrCmp $SKIP_DIALOGS "true" 0 CHECKV2_DONE
- StrCmp $INSTDIR "$PROGRAMFILES\SecondLifeViewer2" CHECKV2_DONE ; don't uninstall our own install dir.
- IfFileExists "$PROGRAMFILES\SecondLifeViewer2\uninst.exe" CHECKV2_FOUND CHECKV2_DONE
-
- CHECKV2_FOUND:
- StrCpy $DO_UNINSTALL_V2 "true"
-
- CHECKV2_DONE:
-
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Save user files to temp location
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function PreserveUserFiles
-
- Push $0
- Push $1
- Push $2
-
- RMDir /r "$TEMP\SecondLifeSettingsBackup"
- CreateDirectory "$TEMP\SecondLifeSettingsBackup"
- StrCpy $0 0 ; Index number used to iterate via EnumRegKey
-
- LOOP:
- EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
- StrCmp $1 "" DONE ; no more users
-
- ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
- StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
-
- ; Required since ProfileImagePath is of type REG_EXPAND_SZ
- ExpandEnvStrings $2 $2
-
- CreateDirectory "$TEMP\SecondLifeSettingsBackup\$0"
- CopyFiles /SILENT "$2\Application Data\SecondLife\*" "$TEMP\SecondLifeSettingsBackup\$0"
-
- CONTINUE:
- IntOp $0 $0 + 1
- Goto LOOP
- DONE:
-
- Pop $2
- Pop $1
- Pop $0
-
- ; Copy files in Documents and Settings\All Users\SecondLife
- Push $0
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
- StrCmp $0 "" +2
- CreateDirectory "$TEMP\SecondLifeSettingsBackup\AllUsers\"
- CopyFiles /SILENT "$2\Application Data\SecondLife\*" "$TEMP\SecondLifeSettingsBackup\AllUsers\"
- Pop $0
-
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Restore user files from temp location
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function RestoreUserFiles
-
- Push $0
- Push $1
- Push $2
-
- StrCpy $0 0 ; Index number used to iterate via EnumRegKey
-
- LOOP:
- EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
- StrCmp $1 "" DONE ; no more users
-
- ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
- StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
-
- ; Required since ProfileImagePath is of type REG_EXPAND_SZ
- ExpandEnvStrings $2 $2
-
- CreateDirectory "$2\Application Data\SecondLife\"
- CopyFiles /SILENT "$TEMP\SecondLifeSettingsBackup\$0\*" "$2\Application Data\SecondLife\"
-
- CONTINUE:
- IntOp $0 $0 + 1
- Goto LOOP
- DONE:
-
- Pop $2
- Pop $1
- Pop $0
-
- ; Copy files in Documents and Settings\All Users\SecondLife
- Push $0
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
- StrCmp $0 "" +2
- CreateDirectory "$2\Application Data\SecondLife\"
- CopyFiles /SILENT "$TEMP\SecondLifeSettingsBackup\AllUsers\*" "$2\Application Data\SecondLife\"
- Pop $0
-
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Remove temp dirs
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function RemoveTempUserFiles
-
- Push $0
- Push $1
- Push $2
-
- StrCpy $0 0 ; Index number used to iterate via EnumRegKey
-
- LOOP:
- EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
- StrCmp $1 "" DONE ; no more users
-
- ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
- StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
-
- ; Required since ProfileImagePath is of type REG_EXPAND_SZ
- ExpandEnvStrings $2 $2
-
- RMDir /r "$TEMP\SecondLifeSettingsBackup\$0\*"
-
- CONTINUE:
- IntOp $0 $0 + 1
- Goto LOOP
- DONE:
-
- Pop $2
- Pop $1
- Pop $0
-
- ; Copy files in Documents and Settings\All Users\SecondLife
- Push $0
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
- StrCmp $0 "" +2
- RMDir /r "$TEMP\SecondLifeSettingsBackup\AllUsers\*"
- Pop $0
-
- FunctionEnd
-
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Clobber user files - TEST ONLY
- ; This is here for testing, generally not desirable to call it.
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;Function ClobberUserFilesTESTONLY
-
- ;Push $0
- ;Push $1
- ;Push $2
- ;
- ; StrCpy $0 0 ; Index number used to iterate via EnumRegKey
- ;
- ; LOOP:
- ; EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
- ; StrCmp $1 "" DONE ; no more users
- ;
- ; ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
- ; StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
- ;
- ; ; Required since ProfileImagePath is of type REG_EXPAND_SZ
- ; ExpandEnvStrings $2 $2
- ;
- ; RMDir /r "$2\Application Data\SecondLife\"
- ;
- ; CONTINUE:
- ; IntOp $0 $0 + 1
- ; Goto LOOP
- ; DONE:
- ;
- ;Pop $2
- ;Pop $1
- ;Pop $0
- ;
- ;; Copy files in Documents and Settings\All Users\SecondLife
- ;Push $0
- ; ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
- ; StrCmp $0 "" +2
- ; RMDir /r "$2\Application Data\SecondLife\"
- ;Pop $0
- ;
- ;FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Delete the installed shader files
- ;;; Since shaders are in active development, we'll likely need to shuffle them
- ;;; around a bit from build to build. This ensures that shaders that we move
- ;;; or rename in the dev tree don't get left behind in the install.
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function RemoveOldShaders
-
- ;; Remove old shader files first so fallbacks will work. see DEV-5663
- RMDir /r "$INSTDIR\app_settings\shaders\*"
-
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Delete the installed XUI files
- ;;; We've changed the directory hierarchy for skins, putting all XUI and texture
- ;;; files under a specific skin directory, i.e. skins/default/xui/en-us as opposed
- ;;; to skins/xui/en-us. Need to clean up the old path when upgrading
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function RemoveOldXUI
-
- ;; remove old XUI and texture files
- RmDir /r "$INSTDIR\skins\html"
- RmDir /r "$INSTDIR\skins\xui"
- RmDir /r "$INSTDIR\skins\textures"
- Delete "$INSTDIR\skins\*.txt"
-
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Remove any releasenotes files.
- ;;; We are no longer including release notes with the viewer. This will delete
- ;;; any that were left behind by an older installer. Delete will not fail if
- ;;; the files do not exist
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function RemoveOldReleaseNotes
-
- ;; remove releasenotes.txt file from application directory, and the shortcut
- ;; from the start menu.
- Delete "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk"
- Delete "$INSTDIR\releasenotes.txt"
-
- FunctionEnd
-
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Delete files in Documents and Settings\<user>\SecondLife
- ; Delete files in Documents and Settings\All Users\SecondLife
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function un.DocumentsAndSettingsFolder
-
- ; Delete files in Documents and Settings\<user>\SecondLife
- Push $0
- Push $1
- Push $2
-
- DetailPrint "Deleting files in Documents and Settings folder"
-
- StrCpy $0 0 ; Index number used to iterate via EnumRegKey
-
- LOOP:
- EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
- StrCmp $1 "" DONE ; no more users
-
- ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
- StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
-
- ; Required since ProfileImagePath is of type REG_EXPAND_SZ
- ExpandEnvStrings $2 $2
-
- ; Remove all cache and settings files but leave any other .txt files to preserve the chat logs
- ; RMDir /r "$2\Application Data\SecondLife\logs"
- RMDir /r "$2\Application Data\SecondLife\browser_profile"
- RMDir /r "$2\Application Data\SecondLife\user_settings"
- Delete "$2\Application Data\SecondLife\*.xml"
- Delete "$2\Application Data\SecondLife\*.bmp"
- Delete "$2\Application Data\SecondLife\search_history.txt"
- Delete "$2\Application Data\SecondLife\plugin_cookies.txt"
- Delete "$2\Application Data\SecondLife\typed_locations.txt"
-
- CONTINUE:
- IntOp $0 $0 + 1
- Goto LOOP
- DONE:
-
- Pop $2
- Pop $1
- Pop $0
-
- ; Delete files in Documents and Settings\All Users\SecondLife
- Push $0
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
- StrCmp $0 "" +2
- RMDir /r "$0\SecondLife"
- Pop $0
-
- ; Delete files in C:\Windows\Application Data\SecondLife
- ; If the user is running on a pre-NT system, Application Data lives here instead of
- ; in Documents and Settings.
- RMDir /r "$WINDIR\Application Data\SecondLife"
-
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Close the program, if running. Modifies no variables.
- ; Allows user to bail out of uninstall process.
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function un.CloseSecondLife
- Push $0
- FindWindow $0 "Second Life" ""
- IntCmp $0 0 DONE
- MessageBox MB_OKCANCEL $(CloseSecondLifeUnInstMB) IDOK CLOSE IDCANCEL CANCEL_UNINSTALL
-
- CANCEL_UNINSTALL:
- Quit
-
- CLOSE:
- DetailPrint $(CloseSecondLifeUnInstDP)
- SendMessage $0 16 0 0
-
- LOOP:
- FindWindow $0 "Second Life" ""
- IntCmp $0 0 DONE
- Sleep 500
- Goto LOOP
-
- DONE:
- Pop $0
- Return
- FunctionEnd
-
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;
- ; Delete the stored password for the current Windows user
- ; DEV-10821 -- Unauthorised user can gain access to an SL account after a real user has uninstalled
- ;
- Function un.RemovePassword
-
- DetailPrint "Removing Second Life password"
-
- SetShellVarContext current
- Delete "$APPDATA\SecondLife\user_settings\password.dat"
- SetShellVarContext all
-
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Delete the installed files
- ;;; This deletes the uninstall executable, but it works
- ;;; because it is copied to temp directory before running
- ;;;
- ;;; Note: You must list all files here, because we only
- ;;; want to delete our files, not things users left in the
- ;;; application directories.
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function un.ProgramFiles
-
- ;; Remove mozilla file first so recursive directory deletion doesn't get hung up
- Delete "$INSTDIR\app_settings\mozilla\components"
-
- ;; This placeholder is replaced by the complete list of files to uninstall by viewer_manifest.py
- %%DELETE_FILES%%
-
- ;; Optional/obsolete files. Delete won't fail if they don't exist.
- Delete "$INSTDIR\dronesettings.ini"
- Delete "$INSTDIR\message_template.msg"
- Delete "$INSTDIR\newview.pdb"
- Delete "$INSTDIR\newview.map"
- Delete "$INSTDIR\SecondLife.pdb"
- Delete "$INSTDIR\SecondLife.map"
- Delete "$INSTDIR\comm.dat"
- Delete "$INSTDIR\*.glsl"
- Delete "$INSTDIR\motions\*.lla"
- Delete "$INSTDIR\trial\*.html"
- Delete "$INSTDIR\newview.exe"
- ;; Remove entire help directory
- Delete "$INSTDIR\help\Advanced\*"
- RMDir "$INSTDIR\help\Advanced"
- Delete "$INSTDIR\help\basics\*"
- RMDir "$INSTDIR\help\basics"
- Delete "$INSTDIR\help\Concepts\*"
- RMDir "$INSTDIR\help\Concepts"
- Delete "$INSTDIR\help\welcome\*"
- RMDir "$INSTDIR\help\welcome"
- Delete "$INSTDIR\help\*"
- RMDir "$INSTDIR\help"
-
- Delete "$INSTDIR\uninst.exe"
- RMDir "$INSTDIR"
-
- IfFileExists "$INSTDIR" FOLDERFOUND NOFOLDER
-
- FOLDERFOUND:
- ; Silent uninstall always removes all files (/SD IDYES)
- MessageBox MB_YESNO $(DeleteProgramFilesMB) /SD IDYES IDNO NOFOLDER
- RMDir /r "$INSTDIR"
-
- NOFOLDER:
-
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Uninstall settings
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- UninstallText $(UninstallTextMsg)
- ShowUninstDetails show
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Uninstall section
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Section Uninstall
-
- ; Start with some default values.
- StrCpy $INSTFLAGS ""
- StrCpy $INSTPROG "${INSTNAME}"
- StrCpy $INSTEXE "${INSTEXE}"
- StrCpy $INSTSHORTCUT "${SHORTCUT}"
- Call un.CheckIfAdministrator ; Make sure the user can install/uninstall
-
- ; uninstall for all users (if you change this, change it in the install as well)
- SetShellVarContext all
-
- ; Make sure we're not running
- Call un.CloseSecondLife
-
- ; Clean up registry keys and subkeys (these should all be !defines somewhere)
- DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG"
- DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG"
-
- ; Clean up shortcuts
- Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*"
- RMDir "$SMPROGRAMS\$INSTSHORTCUT"
-
- Delete "$DESKTOP\$INSTSHORTCUT.lnk"
- Delete "$INSTDIR\$INSTSHORTCUT.lnk"
- Delete "$INSTDIR\Uninstall $INSTSHORTCUT.lnk"
-
- ; Clean up cache and log files.
- ; Leave them in-place for non AGNI installs.
-
- !ifdef UNINSTALL_SETTINGS
- Call un.DocumentsAndSettingsFolder
- !endif
-
- ; remove stored password on uninstall
- Call un.RemovePassword
-
- Call un.ProgramFiles
-
- SectionEnd ; end of uninstall section
-
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; (From the NSIS documentation, JC)
- ; GetWindowsVersion
- ;
- ; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
- ; Updated by Joost Verburg
- ;
- ; Returns on top of stack
- ;
- ; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003)
- ; or
- ; '' (Unknown Windows Version)
- ;
- ; Usage:
- ; Call GetWindowsVersion
- ; Pop $R0
- ; ; at this point $R0 is "NT 4.0" or whatnot
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function GetWindowsVersion
-
- Push $R0
- Push $R1
-
- ReadRegStr $R0 HKLM \
- "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
-
- IfErrors 0 lbl_winnt
-
- ; we are not NT
- ReadRegStr $R0 HKLM \
- "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
-
- StrCpy $R1 $R0 1
- StrCmp $R1 '4' 0 lbl_error
-
- StrCpy $R1 $R0 3
-
- StrCmp $R1 '4.0' lbl_win32_95
- StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
-
- lbl_win32_95:
- StrCpy $R0 '95'
- Goto lbl_done
-
- lbl_win32_98:
- StrCpy $R0 '98'
- Goto lbl_done
-
- lbl_win32_ME:
- StrCpy $R0 'ME'
- Goto lbl_done
-
- lbl_winnt:
-
- StrCpy $R1 $R0 1
-
- StrCmp $R1 '3' lbl_winnt_x
- StrCmp $R1 '4' lbl_winnt_x
-
- StrCpy $R1 $R0 3
-
- StrCmp $R1 '5.0' lbl_winnt_2000
- StrCmp $R1 '5.1' lbl_winnt_XP
- StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
-
- lbl_winnt_x:
- StrCpy $R0 "NT $R0" 6
- Goto lbl_done
-
- lbl_winnt_2000:
- Strcpy $R0 '2000'
- Goto lbl_done
-
- lbl_winnt_XP:
- Strcpy $R0 'XP'
- Goto lbl_done
-
- lbl_winnt_2003:
- Strcpy $R0 '2003'
- Goto lbl_done
-
- lbl_error:
- Strcpy $R0 ''
- lbl_done:
-
- Pop $R1
- Exch $R0
-
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Note: to add new languages, add a language file include to the list
- ;; at the top of this file, add an entry to the menu and then add an
- ;; entry to the language ID selector below
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function .onInit
- Push $0
- ${GetParameters} $COMMANDLINE ; get our command line
-
- ${GetOptions} $COMMANDLINE "/SKIP_DIALOGS" $0
- IfErrors +2 0 ; If error jump past setting SKIP_DIALOGS
- StrCpy $SKIP_DIALOGS "true"
-
- ${GetOptions} $COMMANDLINE "/LANGID=" $0 ; /LANGID=1033 implies US English
- ; If no language (error), then proceed
- IfErrors lbl_configure_default_lang
- ; No error means we got a language, so use it
- StrCpy $LANGUAGE $0
- Goto lbl_return
-
- lbl_configure_default_lang:
- ; If we currently have a version of SL installed, default to the language of that install
- ; Otherwise don't change $LANGUAGE and it will default to the OS UI language.
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
- IfErrors +2 0 ; If error skip the copy instruction
- StrCpy $LANGUAGE $0
-
- ; For silent installs, no language prompt, use default
- IfSilent lbl_return
- StrCmp $SKIP_DIALOGS "true" lbl_return
-
- lbl_build_menu:
- Push ""
- # Use separate file so labels can be UTF-16 but we can still merge changes
- # into this ASCII file. JC
- !include "%%SOURCE%%\installers\windows\language_menu.nsi"
-
- Push A ; A means auto count languages for the auto count to work the first empty push (Push "") must remain
- LangDLL::LangDialog $(InstallerLanguageTitle) $(SelectInstallerLanguage)
- Pop $0
- StrCmp $0 "cancel" 0 +2
- Abort
- StrCpy $LANGUAGE $0
-
- ; save language in registry
- WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE
- lbl_return:
- Pop $0
- Return
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function un.onInit
- ; read language from registry and set for uninstaller
- ; Key will be removed on successful uninstall
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
- IfErrors lbl_end
- StrCpy $LANGUAGE $0
- lbl_end:
- Return
- FunctionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; MAIN SECTION
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Section "" ; (default section)
-
- SetShellVarContext all ; install for all users (if you change this, change it in the uninstall as well)
-
- ; Start with some default values.
- StrCpy $INSTFLAGS "${INSTFLAGS}"
- StrCpy $INSTPROG "${INSTNAME}"
- StrCpy $INSTEXE "${INSTEXE}"
- StrCpy $INSTSHORTCUT "${SHORTCUT}"
-
- Call CheckWindowsVersion ; warn if on Windows 98/ME
- Call CheckCPUFlags ; Make sure we have SSE2 support
- Call CheckIfAdministrator ; Make sure the user can install/uninstall
- Call CheckIfAlreadyCurrent ; Make sure that we haven't already installed this version
- Call CloseSecondLife ; Make sure we're not running
- Call CheckNetworkConnection ; ping secondlife.com
- Call CheckWillUninstallV2 ; See if a V2 install exists and will be removed.
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- StrCmp $DO_UNINSTALL_V2 "" PRESERVE_DONE
- Call PreserveUserFiles
- PRESERVE_DONE:
-
- ;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers.
- ;Call RemoveCacheFiles ; Installing over removes potentially corrupted
- ; VFS and cache files.
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Need to clean out shader files from previous installs to fix DEV-5663
- Call RemoveOldShaders
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Need to clean out old XUI files that predate skinning
- Call RemoveOldXUI
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Clear out old releasenotes.txt files. These are now on the public wiki.
- Call RemoveOldReleaseNotes
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Files
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
- %%INSTALL_FILES%%
-
- # Pass the installer's language to the client to use as a default
- StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)"
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Shortcuts in start menu
- CreateDirectory "$SMPROGRAMS\$INSTSHORTCUT"
- SetOutPath "$INSTDIR"
- CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \
- "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
-
-
- WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \
- "InternetShortcut" "URL" \
- "http://join.secondlife.com/"
- WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \
- "InternetShortcut" "URL" \
- "http://www.secondlife.com/account/"
- WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.url" \
- "InternetShortcut" "URL" \
- "http://wiki.secondlife.com/wiki/LSL_Portal"
- CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \
- '"$INSTDIR\uninst.exe"' ''
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Other shortcuts
- SetOutPath "$INSTDIR"
- CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" \
- "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
- CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" \
- "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
- CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \
- '"$INSTDIR\uninst.exe"' ''
-
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Write registry
- WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR"
- WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}"
- WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags" "$INSTFLAGS"
- WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT"
- WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE"
- WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)"
- WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe"'
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Write URL registry info
- WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life"
- WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" ""
- WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
- ;; URL param must be last item passed to viewer, it ignores subsequent params
- ;; to avoid parameter injection attacks.
- WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"'
- WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info"(default)" "URL:Second Life"
- WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info" "URL Protocol" ""
- WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
- ;; URL param must be last item passed to viewer, it ignores subsequent params
- ;; to avoid parameter injection attacks.
- WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"'
-
- ; write out uninstaller
- WriteUninstaller "$INSTDIR\uninst.exe"
-
- ; Uninstall existing "Second Life Viewer 2" install if needed.
- StrCmp $DO_UNINSTALL_V2 "" REMOVE_SLV2_DONE
- ExecWait '"$PROGRAMFILES\SecondLifeViewer2\uninst.exe" /S _?=$PROGRAMFILES\SecondLifeViewer2'
- Delete "$PROGRAMFILES\SecondLifeViewer2\uninst.exe" ; with _? option above, uninst.exe will be left behind.
- RMDir "$PROGRAMFILES\SecondLifeViewer2" ; will remove only if empty.
-
- Call RestoreUserFiles
- Call RemoveTempUserFiles
- REMOVE_SLV2_DONE:
-
- ; end of default section
- SectionEnd
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;