installer_template.nsi
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:28k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;; secondlife setup.nsi
  3. ;; Copyright 2004-2008, Linden Research, Inc.
  4. ;;
  5. ;; NSIS Unicode 2.38.1 or higher required
  6. ;; http://www.scratchpaper.com/
  7. ;;
  8. ;; Author: James Cook, Don Kjer, Callum Prentice
  9. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  10. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  11. ;; Compiler flags
  12. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  13. SetOverwrite on ; overwrite files
  14. SetCompress auto ; compress iff saves space
  15. SetCompressor /solid lzma ; compress whole installer as one block
  16. SetDatablockOptimize off ; only saves us 0.1%, not worth it
  17. XPStyle on                  ; add an XP manifest to the installer
  18. RequestExecutionLevel admin ; on Vista we must be admin because we write to Program Files
  19. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  20. ;;; Project flags
  21. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  22. %%VERSION%%
  23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  24. ;; Tweak for different servers/builds (this placeholder is replaced by viewer_manifest.py)
  25. ;; For example:
  26. ;; !define INSTFLAGS "%(flags)s"
  27. ;; !define INSTNAME   "SecondLife%(grid_caps)s"
  28. ;; !define SHORTCUT   "Second Life (%(grid_caps)s)"
  29. ;; !define URLNAME   "secondlife%(grid)s"
  30. ;; !define UNINSTALL_SETTINGS 1
  31. %%GRID_VARS%%
  32. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  33. ;; - language files - one for each language (or flavor thereof)
  34. ;; (these files are in the same place as the nsi template but the python script generates a new nsi file in the 
  35. ;; application directory so we have to add a path to these include files)
  36. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  37. !include "%%SOURCE%%installerswindowslang_de.nsi"
  38. !include "%%SOURCE%%installerswindowslang_en-us.nsi"
  39. !include "%%SOURCE%%installerswindowslang_es.nsi"
  40. !include "%%SOURCE%%installerswindowslang_fr.nsi"
  41. !include "%%SOURCE%%installerswindowslang_ja.nsi"
  42. !include "%%SOURCE%%installerswindowslang_it.nsi"
  43. !include "%%SOURCE%%installerswindowslang_ko.nsi"
  44. !include "%%SOURCE%%installerswindowslang_nl.nsi"
  45. !include "%%SOURCE%%installerswindowslang_pt-br.nsi"
  46. !include "%%SOURCE%%installerswindowslang_zh.nsi"
  47. # *TODO: Move these into the language files themselves
  48. LangString LanguageCode ${LANG_GERMAN}   "de"
  49. LangString LanguageCode ${LANG_ENGLISH}  "en"
  50. LangString LanguageCode ${LANG_SPANISH}  "es"
  51. LangString LanguageCode ${LANG_FRENCH}   "fr"
  52. LangString LanguageCode ${LANG_JAPANESE} "ja"
  53. LangString LanguageCode ${LANG_ITALIAN}  "it"
  54. LangString LanguageCode ${LANG_KOREAN}   "ko"
  55. LangString LanguageCode ${LANG_DUTCH}    "nl"
  56. LangString LanguageCode ${LANG_PORTUGUESEBR} "pt"
  57. LangString LanguageCode ${LANG_SIMPCHINESE}  "zh"
  58. Name ${INSTNAME}
  59. SubCaption 0 $(LicenseSubTitleSetup) ; override "license agreement" text
  60. BrandingText " " ; bottom of window text
  61. Icon          %%SOURCE%%installerswindows${INSTALL_ICON}
  62. UninstallIcon %%SOURCE%%installerswindows${UNINSTALL_ICON}
  63. WindowIcon on ; show our icon in left corner
  64. BGGradient off ; no big background window
  65. CRCCheck on ; make sure CRC is OK
  66. InstProgressFlags smooth colored ; new colored smooth look
  67. ShowInstDetails nevershow ; no details, no "show" button
  68. SetOverwrite on ; stomp files by default
  69. AutoCloseWindow true ; after all files install, close window
  70. InstallDir "$PROGRAMFILES${INSTNAME}"
  71. InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARELinden Research, Inc.${INSTNAME}" ""
  72. DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
  73. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  74. ;;; Variables
  75. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  76. Var INSTPROG
  77. Var INSTEXE
  78. Var INSTFLAGS
  79. Var INSTSHORTCUT
  80. Var COMMANDLINE         ; command line passed to this installer, set in .onInit
  81. Var SHORTCUT_LANG_PARAM ; "--set InstallLanguage de", passes language to viewer
  82. ;;; Function definitions should go before file includes, because calls to
  83. ;;; DLLs like LangDLL trigger an implicit file include, so if that call is at
  84. ;;; the end of this script NSIS has to decompress the whole installer before 
  85. ;;; it can call the DLL function. JC
  86. !include "FileFunc.nsh"     ; For GetParameters, GetOptions
  87. !insertmacro GetParameters
  88. !insertmacro GetOptions
  89. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  90. ;;; After install completes, launch app
  91. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  92. Function .onInstSuccess
  93.     Push $R0 # Option value, unused
  94.     ${GetOptions} $COMMANDLINE "/AUTOSTART" $R0
  95.     # If parameter was there (no error) just launch
  96.     # Otherwise ask
  97.     IfErrors label_ask_launch label_launch
  98.     
  99. label_ask_launch:
  100.     # Don't launch by default when silent
  101.     IfSilent label_no_launch
  102. MessageBox MB_YESNO $(InstSuccesssQuestion) 
  103.         IDYES label_launch IDNO label_no_launch
  104.         
  105. label_launch:
  106. # Assumes SetOutPath $INSTDIR
  107. Exec '"$INSTDIR$INSTEXE" $INSTFLAGS $SHORTCUT_LANG_PARAM'
  108. label_no_launch:
  109. Pop $R0
  110. FunctionEnd
  111. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  112. ; Make sure we're not on Windows 98 / ME
  113. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  114. Function CheckWindowsVersion
  115. DetailPrint "Checking Windows version..."
  116. Call GetWindowsVersion
  117. Pop $R0
  118. ; Just get first two characters, ignore 4.0 part of "NT 4.0"
  119. StrCpy $R0 $R0 2
  120. ; Blacklist certain OS versions
  121. StrCmp $R0 "95" win_ver_bad
  122. StrCmp $R0 "98" win_ver_bad
  123. StrCmp $R0 "ME" win_ver_bad
  124. StrCmp $R0 "NT" win_ver_bad
  125. Return
  126. win_ver_bad:
  127. MessageBox MB_YESNO $(CheckWindowsVersionMB) IDNO win_ver_abort
  128. Return
  129. win_ver_abort:
  130. Quit
  131. FunctionEnd
  132. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  133. ; Make sure the user can install/uninstall
  134. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  135. Function CheckIfAdministrator
  136.     DetailPrint $(CheckAdministratorInstDP)
  137.     UserInfo::GetAccountType
  138.     Pop $R0
  139.     StrCmp $R0 "Admin" lbl_is_admin
  140.         MessageBox MB_OK $(CheckAdministratorInstMB)
  141.         Quit
  142. lbl_is_admin:
  143.     Return
  144. FunctionEnd
  145. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  146. ;;
  147. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  148. Function un.CheckIfAdministrator
  149.     DetailPrint $(CheckAdministratorUnInstDP)
  150.     UserInfo::GetAccountType
  151.     Pop $R0
  152.     StrCmp $R0 "Admin" lbl_is_admin
  153.         MessageBox MB_OK $(CheckAdministratorUnInstMB)
  154.         Quit
  155. lbl_is_admin:
  156.     Return
  157. FunctionEnd
  158. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  159. ; Checks to see if the current version has already been installed (according to the registry).
  160. ; If it has, allow user to bail out of install process.
  161. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  162. Function CheckIfAlreadyCurrent
  163.   Push $0
  164. ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARELinden Research, Inc.$INSTPROG" "Version"
  165.     StrCmp $0 ${VERSION_LONG} 0 DONE
  166. MessageBox MB_OKCANCEL $(CheckIfCurrentMB) /SD IDOK IDOK DONE
  167.     Quit
  168.   DONE:
  169.     Pop $0
  170.     Return
  171. FunctionEnd
  172. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  173. ; Close the program, if running. Modifies no variables.
  174. ; Allows user to bail out of install process.
  175. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  176. Function CloseSecondLife
  177.   Push $0
  178.   FindWindow $0 "Second Life" ""
  179.   IntCmp $0 0 DONE
  180.   MessageBox MB_OKCANCEL $(CloseSecondLifeInstMB) IDOK CLOSE IDCANCEL CANCEL_INSTALL
  181.   CANCEL_INSTALL:
  182.     Quit
  183.   CLOSE:
  184.     DetailPrint $(CloseSecondLifeInstDP)
  185.     SendMessage $0 16 0 0
  186.   LOOP:
  187.   FindWindow $0 "Second Life" ""
  188.   IntCmp $0 0 DONE
  189.   Sleep 500
  190.   Goto LOOP
  191.   DONE:
  192.     Pop $0
  193.     Return
  194. FunctionEnd
  195. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  196. ; Test our connection to secondlife.com
  197. ; Also allows us to count attempted installs by examining web logs.
  198. ; *TODO: Return current SL version info and have installer check
  199. ; if it is up to date.
  200. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  201. Function CheckNetworkConnection
  202.     Push $0
  203.     Push $1
  204.     Push $2 # Option value for GetOptions
  205.     DetailPrint $(CheckNetworkConnectionDP)
  206.     ; Look for a tag value from the stub installer, used for statistics
  207.     ; to correlate installs.  Default to "" if not found on command line.
  208.     StrCpy $2 ""
  209.     ${GetOptions} $COMMANDLINE "/STUBTAG=" $2
  210.     GetTempFileName $0
  211.     !define HTTP_TIMEOUT 5000 ; milliseconds
  212.     ; Don't show secondary progress bar, this will be quick.
  213.     NSISdl::download_quiet 
  214.         /TIMEOUT=${HTTP_TIMEOUT} 
  215.         "http://install.secondlife.com/check/?stubtag=$2&version=${VERSION_LONG}" 
  216.         $0
  217.     Pop $1 ; Return value, either "success", "cancel" or an error message
  218.     ; MessageBox MB_OK "Download result: $1"
  219.     ; Result ignored for now
  220. ; StrCmp $1 "success" +2
  221. ; DetailPrint "Connection failed: $1"
  222.     Delete $0 ; temporary file
  223.     Pop $2
  224.     Pop $1
  225.     Pop $0
  226.     Return
  227. FunctionEnd
  228. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  229. ; Delete files in Documents and Settings<user>SecondLifecache
  230. ; Delete files in Documents and SettingsAll UsersSecondLifecache
  231. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  232. ;Function RemoveCacheFiles
  233. ;
  234. ;; Delete files in Documents and Settings<user>SecondLife
  235. ;Push $0
  236. ;Push $1
  237. ;Push $2
  238. ;  DetailPrint $(RemoveCacheFilesDP)
  239. ;
  240. ;  StrCpy $0 0 ; Index number used to iterate via EnumRegKey
  241. ;
  242. ;  LOOP:
  243. ;    EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWAREMicrosoftWindows NTCurrentVersionProfileList" $0
  244. ;    StrCmp $1 "" DONE               ; no more users
  245. ;
  246. ;    ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWAREMicrosoftWindows NTCurrentVersionProfileList$1" "ProfileImagePath" 
  247. ;    StrCmp $2 "" CONTINUE 0         ; "ProfileImagePath" value is missing
  248. ;
  249. ;    ; Required since ProfileImagePath is of type REG_EXPAND_SZ
  250. ;    ExpandEnvStrings $2 $2
  251. ;
  252. ; ; When explicitly uninstalling, everything goes away
  253. ;    RMDir /r "$2Application DataSecondLifecache"
  254. ;
  255. ;  CONTINUE:
  256. ;    IntOp $0 $0 + 1
  257. ;    Goto LOOP
  258. ;  DONE:
  259. ;Pop $2
  260. ;Pop $1
  261. ;Pop $0
  262. ;
  263. ;; Delete files in Documents and SettingsAll UsersSecondLife
  264. ;Push $0
  265. ;  ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWAREMicrosoftWindowsCurrentVersionExplorerShell Folders" "Common AppData"
  266. ;  StrCmp $0 "" +2
  267. ;  RMDir /r "$0SecondLifecache"
  268. ;Pop $0
  269. ;
  270. ;; Delete filse in C:WindowsApplication DataSecondLife
  271. ;; If the user is running on a pre-NT system, Application Data lives here instead of
  272. ;; in Documents and Settings.
  273. ;RMDir /r "$WINDIRApplication DataSecondLifecache"
  274. ;
  275. ;FunctionEnd
  276. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  277. ;;; Delete the installed shader files
  278. ;;; Since shaders are in active development, we'll likely need to shuffle them
  279. ;;; around a bit from build to build.  This ensures that shaders that we move
  280. ;;; or rename in the dev tree don't get left behind in the install.
  281. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  282. Function RemoveOldShaders
  283. ;; Remove old shader files first so fallbacks will work. see DEV-5663
  284. RMDir /r "$INSTDIRapp_settingsshaders*"
  285. FunctionEnd
  286. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  287. ;;; Delete the installed XUI files
  288. ;;; We've changed the directory hierarchy for skins, putting all XUI and texture
  289. ;;; files under a specific skin directory, i.e. skins/default/xui/en-us as opposed
  290. ;;; to skins/xui/en-us.  Need to clean up the old path when upgrading
  291. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  292. Function RemoveOldXUI
  293. ;; remove old XUI and texture files
  294. RmDir /r "$INSTDIRskinshtml"
  295. RmDir /r "$INSTDIRskinsxui"
  296. RmDir /r "$INSTDIRskinstextures"
  297. Delete "$INSTDIRskins*.txt"
  298. FunctionEnd
  299. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  300. ;;; Remove any releasenotes files.
  301. ;;; We are no longer including release notes with the viewer. This will delete
  302. ;;; any that were left behind by an older installer. Delete will not fail if
  303. ;;; the files do not exist
  304. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  305. Function RemoveOldReleaseNotes
  306. ;; remove releasenotes.txt file from application directory, and the shortcut
  307. ;; from the start menu.
  308. Delete "$SMPROGRAMS$INSTSHORTCUTSL Release Notes.lnk"
  309. Delete "$INSTDIRreleasenotes.txt"
  310. FunctionEnd
  311. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  312. ;;; Delete a xui file that causes crash in Silver skin in cases where it was
  313. ;;; left behind by an older installer.
  314. ;;; See SNOW-348
  315. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  316. Function RemoveOldAboutLandSilver
  317. Delete "$INSTDIRskinssilverxuien-usfloater_about_land.xml"
  318. FunctionEnd
  319. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  320. ; Delete files in Documents and Settings<user>SecondLife
  321. ; Delete files in Documents and SettingsAll UsersSecondLife
  322. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  323. Function un.DocumentsAndSettingsFolder
  324. ; Delete files in Documents and Settings<user>SecondLife
  325. Push $0
  326. Push $1
  327. Push $2
  328.   DetailPrint "Deleting files in Documents and Settings folder"
  329.   StrCpy $0 0 ; Index number used to iterate via EnumRegKey
  330.   LOOP:
  331.     EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWAREMicrosoftWindows NTCurrentVersionProfileList" $0
  332.     StrCmp $1 "" DONE               ; no more users
  333.     ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWAREMicrosoftWindows NTCurrentVersionProfileList$1" "ProfileImagePath" 
  334.     StrCmp $2 "" CONTINUE 0         ; "ProfileImagePath" value is missing
  335.     ; Required since ProfileImagePath is of type REG_EXPAND_SZ
  336.     ExpandEnvStrings $2 $2
  337. ; If uninstalling a normal install remove everything
  338. ; Otherwise (preview/dmz etc) just remove cache
  339.     StrCmp $INSTFLAGS "" RM_ALL RM_CACHE
  340.       RM_ALL:
  341.         RMDir /r "$2Application DataSecondLife"
  342.       RM_CACHE:
  343.         # Local Settings directory is the cache, there is no "cache" subdir
  344.         RMDir /r "$2Local SettingsApplication DataSecondLife"
  345.         # Vista version of the same
  346.         RMDir /r "$2AppDataLocalSecondLife"
  347.         Delete "$2Application DataSecondLifeuser_settingssettings_windlight.xml"
  348.   CONTINUE:
  349.     IntOp $0 $0 + 1
  350.     Goto LOOP
  351.   DONE:
  352. Pop $2
  353. Pop $1
  354. Pop $0
  355. ; Delete files in Documents and SettingsAll UsersSecondLife
  356. Push $0
  357.   ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWAREMicrosoftWindowsCurrentVersionExplorerShell Folders" "Common AppData"
  358.   StrCmp $0 "" +2
  359.   RMDir /r "$0SecondLife"
  360. Pop $0
  361. ; Delete filse in C:WindowsApplication DataSecondLife
  362. ; If the user is running on a pre-NT system, Application Data lives here instead of
  363. ; in Documents and Settings.
  364. RMDir /r "$WINDIRApplication DataSecondLife"
  365. FunctionEnd
  366. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  367. ; Close the program, if running. Modifies no variables.
  368. ; Allows user to bail out of uninstall process.
  369. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  370. Function un.CloseSecondLife
  371.   Push $0
  372.   FindWindow $0 "Second Life" ""
  373.   IntCmp $0 0 DONE
  374.   MessageBox MB_OKCANCEL $(CloseSecondLifeUnInstMB) IDOK CLOSE IDCANCEL CANCEL_UNINSTALL
  375.   CANCEL_UNINSTALL:
  376.     Quit
  377.   CLOSE:
  378.     DetailPrint $(CloseSecondLifeUnInstDP)
  379.     SendMessage $0 16 0 0
  380.   LOOP:
  381.   FindWindow $0 "Second Life" ""
  382.   IntCmp $0 0 DONE
  383.   Sleep 500
  384.   Goto LOOP
  385.   DONE:
  386.     Pop $0
  387.     Return
  388. FunctionEnd
  389. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  390. ;
  391. ;   Delete the stored password for the current Windows user
  392. ;   DEV-10821 -- Unauthorised user can gain access to an SL account after a real user has uninstalled
  393. ;
  394. Function un.RemovePassword
  395. DetailPrint "Removing Second Life password"
  396. SetShellVarContext current
  397. Delete "$APPDATASecondLifeuser_settingspassword.dat"
  398. SetShellVarContext all
  399. FunctionEnd
  400. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  401. ;;; Delete the installed files
  402. ;;; This deletes the uninstall executable, but it works 
  403. ;;; because it is copied to temp directory before running
  404. ;;;
  405. ;;; Note:  You must list all files here, because we only
  406. ;;; want to delete our files, not things users left in the
  407. ;;; application directories.
  408. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  409. Function un.ProgramFiles
  410. ;; Remove mozilla file first so recursive directory deletion doesn't get hung up
  411. Delete "$INSTDIRapp_settingsmozillacomponents"
  412. ;; This placeholder is replaced by the complete list of files to uninstall by viewer_manifest.py
  413. %%DELETE_FILES%%
  414. ;; Optional/obsolete files.  Delete won't fail if they don't exist.
  415. Delete "$INSTDIRdronesettings.ini"
  416. Delete "$INSTDIRmessage_template.msg"
  417. Delete "$INSTDIRnewview.pdb"
  418. Delete "$INSTDIRnewview.map"
  419. Delete "$INSTDIRSecondLife.pdb"
  420. Delete "$INSTDIRSecondLife.map"
  421. Delete "$INSTDIRcomm.dat"
  422. Delete "$INSTDIR*.glsl"
  423. Delete "$INSTDIRmotions*.lla"
  424. Delete "$INSTDIRtrial*.html"
  425. Delete "$INSTDIRnewview.exe"
  426. ;; Remove entire help directory
  427. Delete "$INSTDIRhelpAdvanced*"
  428. RMDir  "$INSTDIRhelpAdvanced"
  429. Delete "$INSTDIRhelpbasics*"
  430. RMDir  "$INSTDIRhelpbasics"
  431. Delete "$INSTDIRhelpConcepts*"
  432. RMDir  "$INSTDIRhelpConcepts"
  433. Delete "$INSTDIRhelpwelcome*"
  434. RMDir  "$INSTDIRhelpwelcome"
  435. Delete "$INSTDIRhelp*"
  436. RMDir  "$INSTDIRhelp"
  437. Delete "$INSTDIRuninst.exe"
  438. RMDir "$INSTDIR"
  439. IfFileExists "$INSTDIR" FOLDERFOUND NOFOLDER
  440. FOLDERFOUND:
  441.   MessageBox MB_YESNO $(DeleteProgramFilesMB) IDNO NOFOLDER
  442.   RMDir /r "$INSTDIR"
  443. NOFOLDER:
  444. FunctionEnd
  445. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  446. ;;; Uninstall settings
  447. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  448. UninstallText $(UninstallTextMsg)
  449. ShowUninstDetails show
  450. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  451. ;;; Uninstall section
  452. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  453. Section Uninstall
  454. ; Start with some default values.
  455. StrCpy $INSTFLAGS ""
  456. StrCpy $INSTPROG "${INSTNAME}"
  457. StrCpy $INSTEXE "${INSTEXE}"
  458. StrCpy $INSTSHORTCUT "${SHORTCUT}"
  459. Call un.CheckIfAdministrator ; Make sure the user can install/uninstall
  460. ; uninstall for all users (if you change this, change it in the install as well)
  461. SetShellVarContext all
  462. ; Make sure we're not running
  463. Call un.CloseSecondLife
  464. ; Clean up registry keys and subkeys (these should all be !defines somewhere)
  465. DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARELinden Research, Inc.$INSTPROG"
  466. DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWAREMicrosoftWindowsCurrentVersionUninstall$INSTPROG"
  467. ; Clean up shortcuts
  468. Delete "$SMPROGRAMS$INSTSHORTCUT*.*"
  469. RMDir  "$SMPROGRAMS$INSTSHORTCUT"
  470. Delete "$DESKTOP$INSTSHORTCUT.lnk"
  471. Delete "$INSTDIR$INSTSHORTCUT.lnk"
  472. Delete "$INSTDIRUninstall $INSTSHORTCUT.lnk"
  473. ; Clean up cache and log files.
  474. ; Leave them in-place for non AGNI installs.
  475. !ifdef UNINSTALL_SETTINGS
  476. Call un.DocumentsAndSettingsFolder
  477. !endif
  478. ; remove stored password on uninstall
  479. Call un.RemovePassword
  480. Call un.ProgramFiles
  481. SectionEnd  ; end of uninstall section
  482. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  483. ; (From the NSIS documentation, JC)
  484. ; GetWindowsVersion
  485. ;
  486. ; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
  487. ; Updated by Joost Verburg
  488. ;
  489. ; Returns on top of stack
  490. ;
  491. ; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003)
  492. ; or
  493. ; '' (Unknown Windows Version)
  494. ;
  495. ; Usage:
  496. ;   Call GetWindowsVersion
  497. ;   Pop $R0
  498. ;   ; at this point $R0 is "NT 4.0" or whatnot
  499. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  500. Function GetWindowsVersion
  501.  
  502.    Push $R0
  503.    Push $R1
  504.  
  505.    ReadRegStr $R0 HKLM 
  506.    "SOFTWAREMicrosoftWindows NTCurrentVersion" CurrentVersion
  507.    IfErrors 0 lbl_winnt
  508.    
  509.    ; we are not NT
  510.    ReadRegStr $R0 HKLM 
  511.    "SOFTWAREMicrosoftWindowsCurrentVersion" VersionNumber
  512.  
  513.    StrCpy $R1 $R0 1
  514.    StrCmp $R1 '4' 0 lbl_error
  515.  
  516.    StrCpy $R1 $R0 3
  517.  
  518.    StrCmp $R1 '4.0' lbl_win32_95
  519.    StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
  520.  
  521.    lbl_win32_95:
  522.      StrCpy $R0 '95'
  523.    Goto lbl_done
  524.  
  525.    lbl_win32_98:
  526.      StrCpy $R0 '98'
  527.    Goto lbl_done
  528.  
  529.    lbl_win32_ME:
  530.      StrCpy $R0 'ME'
  531.    Goto lbl_done
  532.  
  533.    lbl_winnt:
  534.  
  535.    StrCpy $R1 $R0 1
  536.  
  537.    StrCmp $R1 '3' lbl_winnt_x
  538.    StrCmp $R1 '4' lbl_winnt_x
  539.  
  540.    StrCpy $R1 $R0 3
  541.  
  542.    StrCmp $R1 '5.0' lbl_winnt_2000
  543.    StrCmp $R1 '5.1' lbl_winnt_XP
  544.    StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
  545.  
  546.    lbl_winnt_x:
  547.      StrCpy $R0 "NT $R0" 6
  548.    Goto lbl_done
  549.  
  550.    lbl_winnt_2000:
  551.      Strcpy $R0 '2000'
  552.    Goto lbl_done
  553.  
  554.    lbl_winnt_XP:
  555.      Strcpy $R0 'XP'
  556.    Goto lbl_done
  557.  
  558.    lbl_winnt_2003:
  559.      Strcpy $R0 '2003'
  560.    Goto lbl_done
  561.  
  562.    lbl_error:
  563.      Strcpy $R0 ''
  564.    lbl_done:
  565.  
  566.    Pop $R1
  567.    Exch $R0
  568.  
  569. FunctionEnd
  570. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  571. ;;  Note: to add new languages, add a language file include to the list 
  572. ;;  at the top of this file, add an entry to the menu and then add an 
  573. ;;  entry to the language ID selector below
  574. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  575. Function .onInit
  576.     Push $0
  577.     ${GetParameters} $COMMANDLINE              ; get our command line
  578.     ${GetOptions} $COMMANDLINE "/LANGID=" $0   ; /LANGID=1033 implies US English
  579.     ; If no language (error), then proceed
  580.     IfErrors lbl_check_silent
  581.     ; No error means we got a language, so use it
  582.     StrCpy $LANGUAGE $0
  583.     Goto lbl_return
  584. lbl_check_silent:
  585.     ; For silent installs, no language prompt, use default
  586.     IfSilent lbl_return
  587.     
  588. ; If we currently have a version of SL installed, default to the language of that install
  589.     ; Otherwise don't change $LANGUAGE and it will default to the OS UI language.
  590. ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARELinden Research, Inc.${INSTNAME}" "InstallerLanguage"
  591.     IfErrors lbl_build_menu
  592. StrCpy $LANGUAGE $0
  593. lbl_build_menu:
  594. Push ""
  595.     # Use separate file so labels can be UTF-16 but we can still merge changes
  596.     # into this ASCII file. JC
  597.     !include "%%SOURCE%%installerswindowslanguage_menu.nsi"
  598.     
  599. Push A ; A means auto count languages for the auto count to work the first empty push (Push "") must remain
  600. LangDLL::LangDialog $(InstallerLanguageTitle) $(SelectInstallerLanguage)
  601. Pop $0
  602. StrCmp $0 "cancel" 0 +2
  603. Abort
  604.     StrCpy $LANGUAGE $0
  605. ; save language in registry
  606. WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARELinden Research, Inc.${INSTNAME}" "InstallerLanguage" $LANGUAGE
  607. lbl_return:
  608.     Pop $0
  609.     Return
  610. FunctionEnd
  611. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  612. Function un.onInit
  613. ; read language from registry and set for uninstaller
  614.     ; Key will be removed on successful uninstall
  615. ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARELinden Research, Inc.${INSTNAME}" "InstallerLanguage"
  616.     IfErrors lbl_end
  617. StrCpy $LANGUAGE $0
  618. lbl_end:
  619.     Return
  620. FunctionEnd
  621. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  622. ;;; MAIN SECTION
  623. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  624. Section "" ; (default section)
  625. SetShellVarContext all ; install for all users (if you change this, change it in the uninstall as well)
  626. ; Start with some default values.
  627. StrCpy $INSTFLAGS "${INSTFLAGS}"
  628. StrCpy $INSTPROG "${INSTNAME}"
  629. StrCpy $INSTEXE "${INSTEXE}"
  630. StrCpy $INSTSHORTCUT "${SHORTCUT}"
  631. Call CheckWindowsVersion ; warn if on Windows 98/ME
  632. Call CheckIfAdministrator ; Make sure the user can install/uninstall
  633. Call CheckIfAlreadyCurrent ; Make sure that we haven't already installed this version
  634. Call CloseSecondLife ; Make sure we're not running
  635. Call CheckNetworkConnection ; ping secondlife.com
  636. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  637. ;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers.
  638. ;Call RemoveCacheFiles ; Installing over removes potentially corrupted
  639. ; VFS and cache files.
  640. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  641. ;;; Need to clean out shader files from previous installs to fix DEV-5663
  642. Call RemoveOldShaders
  643. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  644. ;;; Need to clean out old XUI files that predate skinning
  645. Call RemoveOldXUI
  646. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  647. ;;; Clear out old releasenotes.txt files. These are now on the public wiki.
  648. Call RemoveOldReleaseNotes
  649. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  650. ;;; Remove an old xui file that should not be in Silver skin
  651. Call RemoveOldAboutLandSilver
  652. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  653. ;;; Files
  654. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  655. ;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
  656. %%INSTALL_FILES%%
  657. # Pass the installer's language to the client to use as a default
  658. StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)"
  659. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  660. ; Shortcuts in start menu
  661. CreateDirectory "$SMPROGRAMS$INSTSHORTCUT"
  662. SetOutPath "$INSTDIR"
  663. CreateShortCut "$SMPROGRAMS$INSTSHORTCUT$INSTSHORTCUT.lnk" 
  664. "$INSTDIR$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
  665. WriteINIStr "$SMPROGRAMS$INSTSHORTCUTSL Create Account.url" 
  666. "InternetShortcut" "URL" 
  667. "http://www.secondlife.com/registration/"
  668. WriteINIStr "$SMPROGRAMS$INSTSHORTCUTSL Your Account.url" 
  669. "InternetShortcut" "URL" 
  670. "http://www.secondlife.com/account/"
  671. WriteINIStr "$SMPROGRAMS$INSTSHORTCUTSL Scripting Language Help.url" 
  672. "InternetShortcut" "URL" 
  673.                 "http://wiki.secondlife.com/wiki/LSL_Portal"
  674. CreateShortCut "$SMPROGRAMS$INSTSHORTCUTUninstall $INSTSHORTCUT.lnk" 
  675. '"$INSTDIRuninst.exe"' ''
  676. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  677. ; Other shortcuts
  678. SetOutPath "$INSTDIR"
  679. CreateShortCut "$DESKTOP$INSTSHORTCUT.lnk" 
  680.         "$INSTDIR$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
  681. CreateShortCut "$INSTDIR$INSTSHORTCUT.lnk" 
  682.         "$INSTDIR$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
  683. CreateShortCut "$INSTDIRUninstall $INSTSHORTCUT.lnk" 
  684. '"$INSTDIRuninst.exe"' ''
  685. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  686. ; Write registry
  687. WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARELinden Research, Inc.$INSTPROG" "" "$INSTDIR"
  688. WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARELinden Research, Inc.$INSTPROG" "Version" "${VERSION_LONG}"
  689. WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARELinden Research, Inc.$INSTPROG" "Flags" "$INSTFLAGS"
  690. WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARELinden Research, Inc.$INSTPROG" "Shortcut" "$INSTSHORTCUT"
  691. WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARELinden Research, Inc.$INSTPROG" "Exe" "$INSTEXE"
  692. WriteRegStr HKEY_LOCAL_MACHINE "SoftwareMicrosoftWindowsCurrentVersionUninstall$INSTPROG" "DisplayName" "$INSTPROG (remove only)"
  693. WriteRegStr HKEY_LOCAL_MACHINE "SoftwareMicrosoftWindowsCurrentVersionUninstall$INSTPROG" "UninstallString" '"$INSTDIRuninst.exe"'
  694. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  695. ; Write URL registry info
  696. WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life"
  697. WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" ""
  698. WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}DefaultIcon" "" '"$INSTDIR$INSTEXE"'
  699. ;; URL param must be last item passed to viewer, it ignores subsequent params
  700. ;; to avoid parameter injection attacks.
  701. WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}shellopencommand" "" '"$INSTDIR$INSTEXE" $INSTFLAGS -url "%1"'
  702. ; write out uninstaller
  703. WriteUninstaller "$INSTDIRuninst.exe"
  704. ; end of default section
  705. SectionEnd
  706. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;