installer_template.nsi
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:28k
源码类别:
游戏引擎
开发平台:
C++ Builder
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; secondlife setup.nsi
- ;; Copyright 2004-2008, Linden Research, Inc.
- ;;
- ;; 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%%
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; 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%%
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; - 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%%installerswindowslang_de.nsi"
- !include "%%SOURCE%%installerswindowslang_en-us.nsi"
- !include "%%SOURCE%%installerswindowslang_es.nsi"
- !include "%%SOURCE%%installerswindowslang_fr.nsi"
- !include "%%SOURCE%%installerswindowslang_ja.nsi"
- !include "%%SOURCE%%installerswindowslang_it.nsi"
- !include "%%SOURCE%%installerswindowslang_ko.nsi"
- !include "%%SOURCE%%installerswindowslang_nl.nsi"
- !include "%%SOURCE%%installerswindowslang_pt-br.nsi"
- !include "%%SOURCE%%installerswindowslang_zh.nsi"
- # *TODO: Move these into the language files themselves
- 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_KOREAN} "ko"
- LangString LanguageCode ${LANG_DUTCH} "nl"
- LangString LanguageCode ${LANG_PORTUGUESEBR} "pt"
- LangString LanguageCode ${LANG_SIMPCHINESE} "zh"
- Name ${INSTNAME}
- SubCaption 0 $(LicenseSubTitleSetup) ; override "license agreement" text
- BrandingText " " ; bottom of window text
- Icon %%SOURCE%%installerswindows${INSTALL_ICON}
- UninstallIcon %%SOURCE%%installerswindows${UNINSTALL_ICON}
- 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 "SOFTWARELinden Research, Inc.${INSTNAME}" ""
- DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; 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
- ;;; 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
- ${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
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; 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:
- 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 "SOFTWARELinden Research, Inc.$INSTPROG" "Version"
- StrCmp $0 ${VERSION_LONG} 0 DONE
- MessageBox MB_OKCANCEL $(CheckIfCurrentMB) /SD IDOK IDOK DONE
- Quit
- DONE:
- Pop $0
- 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
- 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
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Delete files in Documents and Settings<user>SecondLifecache
- ; Delete files in Documents and SettingsAll UsersSecondLifecache
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;Function RemoveCacheFiles
- ;
- ;; Delete files in Documents and Settings<user>SecondLife
- ;Push $0
- ;Push $1
- ;Push $2
- ; DetailPrint $(RemoveCacheFilesDP)
- ;
- ; StrCpy $0 0 ; Index number used to iterate via EnumRegKey
- ;
- ; LOOP:
- ; EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWAREMicrosoftWindows NTCurrentVersionProfileList" $0
- ; StrCmp $1 "" DONE ; no more users
- ;
- ; ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWAREMicrosoftWindows NTCurrentVersionProfileList$1" "ProfileImagePath"
- ; StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
- ;
- ; ; Required since ProfileImagePath is of type REG_EXPAND_SZ
- ; ExpandEnvStrings $2 $2
- ;
- ; ; When explicitly uninstalling, everything goes away
- ; RMDir /r "$2Application DataSecondLifecache"
- ;
- ; CONTINUE:
- ; IntOp $0 $0 + 1
- ; Goto LOOP
- ; DONE:
- ;Pop $2
- ;Pop $1
- ;Pop $0
- ;
- ;; Delete files in Documents and SettingsAll UsersSecondLife
- ;Push $0
- ; ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWAREMicrosoftWindowsCurrentVersionExplorerShell Folders" "Common AppData"
- ; StrCmp $0 "" +2
- ; RMDir /r "$0SecondLifecache"
- ;Pop $0
- ;
- ;; Delete filse in C:WindowsApplication DataSecondLife
- ;; If the user is running on a pre-NT system, Application Data lives here instead of
- ;; in Documents and Settings.
- ;RMDir /r "$WINDIRApplication DataSecondLifecache"
- ;
- ;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 "$INSTDIRapp_settingsshaders*"
- 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 "$INSTDIRskinshtml"
- RmDir /r "$INSTDIRskinsxui"
- RmDir /r "$INSTDIRskinstextures"
- Delete "$INSTDIRskins*.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$INSTSHORTCUTSL Release Notes.lnk"
- Delete "$INSTDIRreleasenotes.txt"
- FunctionEnd
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Delete a xui file that causes crash in Silver skin in cases where it was
- ;;; left behind by an older installer.
- ;;; See SNOW-348
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Function RemoveOldAboutLandSilver
- Delete "$INSTDIRskinssilverxuien-usfloater_about_land.xml"
- FunctionEnd
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Delete files in Documents and Settings<user>SecondLife
- ; Delete files in Documents and SettingsAll UsersSecondLife
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- 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 "SOFTWAREMicrosoftWindows NTCurrentVersionProfileList" $0
- StrCmp $1 "" DONE ; no more users
- ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWAREMicrosoftWindows NTCurrentVersionProfileList$1" "ProfileImagePath"
- StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
- ; Required since ProfileImagePath is of type REG_EXPAND_SZ
- ExpandEnvStrings $2 $2
- ; If uninstalling a normal install remove everything
- ; Otherwise (preview/dmz etc) just remove cache
- StrCmp $INSTFLAGS "" RM_ALL RM_CACHE
- RM_ALL:
- RMDir /r "$2Application DataSecondLife"
- RM_CACHE:
- # Local Settings directory is the cache, there is no "cache" subdir
- RMDir /r "$2Local SettingsApplication DataSecondLife"
- # Vista version of the same
- RMDir /r "$2AppDataLocalSecondLife"
- Delete "$2Application DataSecondLifeuser_settingssettings_windlight.xml"
- CONTINUE:
- IntOp $0 $0 + 1
- Goto LOOP
- DONE:
- Pop $2
- Pop $1
- Pop $0
- ; Delete files in Documents and SettingsAll UsersSecondLife
- Push $0
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWAREMicrosoftWindowsCurrentVersionExplorerShell Folders" "Common AppData"
- StrCmp $0 "" +2
- RMDir /r "$0SecondLife"
- Pop $0
- ; Delete filse in C:WindowsApplication DataSecondLife
- ; If the user is running on a pre-NT system, Application Data lives here instead of
- ; in Documents and Settings.
- RMDir /r "$WINDIRApplication DataSecondLife"
- 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 "$APPDATASecondLifeuser_settingspassword.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 "$INSTDIRapp_settingsmozillacomponents"
- ;; 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 "$INSTDIRdronesettings.ini"
- Delete "$INSTDIRmessage_template.msg"
- Delete "$INSTDIRnewview.pdb"
- Delete "$INSTDIRnewview.map"
- Delete "$INSTDIRSecondLife.pdb"
- Delete "$INSTDIRSecondLife.map"
- Delete "$INSTDIRcomm.dat"
- Delete "$INSTDIR*.glsl"
- Delete "$INSTDIRmotions*.lla"
- Delete "$INSTDIRtrial*.html"
- Delete "$INSTDIRnewview.exe"
- ;; Remove entire help directory
- Delete "$INSTDIRhelpAdvanced*"
- RMDir "$INSTDIRhelpAdvanced"
- Delete "$INSTDIRhelpbasics*"
- RMDir "$INSTDIRhelpbasics"
- Delete "$INSTDIRhelpConcepts*"
- RMDir "$INSTDIRhelpConcepts"
- Delete "$INSTDIRhelpwelcome*"
- RMDir "$INSTDIRhelpwelcome"
- Delete "$INSTDIRhelp*"
- RMDir "$INSTDIRhelp"
- Delete "$INSTDIRuninst.exe"
- RMDir "$INSTDIR"
- IfFileExists "$INSTDIR" FOLDERFOUND NOFOLDER
- FOLDERFOUND:
- MessageBox MB_YESNO $(DeleteProgramFilesMB) 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 "SOFTWARELinden Research, Inc.$INSTPROG"
- DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWAREMicrosoftWindowsCurrentVersionUninstall$INSTPROG"
- ; Clean up shortcuts
- Delete "$SMPROGRAMS$INSTSHORTCUT*.*"
- RMDir "$SMPROGRAMS$INSTSHORTCUT"
- Delete "$DESKTOP$INSTSHORTCUT.lnk"
- Delete "$INSTDIR$INSTSHORTCUT.lnk"
- Delete "$INSTDIRUninstall $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
- "SOFTWAREMicrosoftWindows NTCurrentVersion" CurrentVersion
- IfErrors 0 lbl_winnt
- ; we are not NT
- ReadRegStr $R0 HKLM
- "SOFTWAREMicrosoftWindowsCurrentVersion" 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 "/LANGID=" $0 ; /LANGID=1033 implies US English
- ; If no language (error), then proceed
- IfErrors lbl_check_silent
- ; No error means we got a language, so use it
- StrCpy $LANGUAGE $0
- Goto lbl_return
- lbl_check_silent:
- ; For silent installs, no language prompt, use default
- IfSilent lbl_return
- ; 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 "SOFTWARELinden Research, Inc.${INSTNAME}" "InstallerLanguage"
- IfErrors lbl_build_menu
- StrCpy $LANGUAGE $0
- 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%%installerswindowslanguage_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 "SOFTWARELinden 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 "SOFTWARELinden 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 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
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; 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
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Remove an old xui file that should not be in Silver skin
- Call RemoveOldAboutLandSilver
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; 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$INSTSHORTCUTSL Create Account.url"
- "InternetShortcut" "URL"
- "http://www.secondlife.com/registration/"
- WriteINIStr "$SMPROGRAMS$INSTSHORTCUTSL Your Account.url"
- "InternetShortcut" "URL"
- "http://www.secondlife.com/account/"
- WriteINIStr "$SMPROGRAMS$INSTSHORTCUTSL Scripting Language Help.url"
- "InternetShortcut" "URL"
- "http://wiki.secondlife.com/wiki/LSL_Portal"
- CreateShortCut "$SMPROGRAMS$INSTSHORTCUTUninstall $INSTSHORTCUT.lnk"
- '"$INSTDIRuninst.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 "$INSTDIRUninstall $INSTSHORTCUT.lnk"
- '"$INSTDIRuninst.exe"' ''
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Write registry
- WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARELinden Research, Inc.$INSTPROG" "" "$INSTDIR"
- WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARELinden Research, Inc.$INSTPROG" "Version" "${VERSION_LONG}"
- WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARELinden Research, Inc.$INSTPROG" "Flags" "$INSTFLAGS"
- WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARELinden Research, Inc.$INSTPROG" "Shortcut" "$INSTSHORTCUT"
- WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARELinden Research, Inc.$INSTPROG" "Exe" "$INSTEXE"
- WriteRegStr HKEY_LOCAL_MACHINE "SoftwareMicrosoftWindowsCurrentVersionUninstall$INSTPROG" "DisplayName" "$INSTPROG (remove only)"
- WriteRegStr HKEY_LOCAL_MACHINE "SoftwareMicrosoftWindowsCurrentVersionUninstall$INSTPROG" "UninstallString" '"$INSTDIRuninst.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}shellopencommand" "" '"$INSTDIR$INSTEXE" $INSTFLAGS -url "%1"'
- ; write out uninstaller
- WriteUninstaller "$INSTDIRuninst.exe"
- ; end of default section
- SectionEnd
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;