browser/installer/windows/nsis/installer.nsi

changeset 2
7e26c7da4463
equal deleted inserted replaced
-1:000000000000 0:65e2358b9c18
1 # This Source Code Form is subject to the terms of the Mozilla Public
2 # License, v. 2.0. If a copy of the MPL was not distributed with this
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
5 # Required Plugins:
6 # AppAssocReg http://nsis.sourceforge.net/Application_Association_Registration_plug-in
7 # ApplicationID http://nsis.sourceforge.net/ApplicationID_plug-in
8 # CityHash http://mxr.mozilla.org/mozilla-central/source/other-licenses/nsis/Contrib/CityHash
9 # ShellLink http://nsis.sourceforge.net/ShellLink_plug-in
10 # UAC http://nsis.sourceforge.net/UAC_plug-in
11 # ServicesHelper Mozilla specific plugin that is located in /other-licenses/nsis
12
13 ; Set verbosity to 3 (e.g. no script) to lessen the noise in the build logs
14 !verbose 3
15
16 ; 7-Zip provides better compression than the lzma from NSIS so we add the files
17 ; uncompressed and use 7-Zip to create a SFX archive of it
18 SetDatablockOptimize on
19 SetCompress off
20 CRCCheck on
21
22 RequestExecutionLevel user
23
24 ; The commands inside this ifdef require NSIS 3.0a2 or greater so the ifdef can
25 ; be removed after we require NSIS 3.0a2 or greater.
26 !ifdef NSIS_PACKEDVERSION
27 Unicode true
28 ManifestSupportedOS all
29 ManifestDPIAware true
30 !endif
31
32 !addplugindir ./
33
34 Var TmpVal
35 Var InstallType
36 Var AddStartMenuSC
37 Var AddQuickLaunchSC
38 Var AddDesktopSC
39 Var InstallMaintenanceService
40 Var PageName
41 Var PreventRebootRequired
42
43 ; By defining NO_STARTMENU_DIR an installer that doesn't provide an option for
44 ; an application's Start Menu PROGRAMS directory and doesn't define the
45 ; StartMenuDir variable can use the common InstallOnInitCommon macro.
46 !define NO_STARTMENU_DIR
47
48 ; On Vista and above attempt to elevate Standard Users in addition to users that
49 ; are a member of the Administrators group.
50 !define NONADMIN_ELEVATE
51
52 !define AbortSurveyURL "http://www.kampyle.com/feedback_form/ff-feedback-form.php?site_code=8166124&form_id=12116&url="
53
54 ; Other included files may depend upon these includes!
55 ; The following includes are provided by NSIS.
56 !include FileFunc.nsh
57 !include LogicLib.nsh
58 !include MUI.nsh
59 !include WinMessages.nsh
60 !include WinVer.nsh
61 !include WordFunc.nsh
62
63 !insertmacro GetOptions
64 !insertmacro GetParameters
65 !insertmacro GetSize
66 !insertmacro StrFilter
67 !insertmacro WordFind
68 !insertmacro WordReplace
69
70 ; The following includes are custom.
71 !include branding.nsi
72 !include defines.nsi
73 !include common.nsh
74 !include locales.nsi
75
76 VIAddVersionKey "FileDescription" "${BrandShortName} Installer"
77 VIAddVersionKey "OriginalFilename" "setup.exe"
78
79 ; Must be inserted before other macros that use logging
80 !insertmacro _LoggingCommon
81
82 !insertmacro AddDisabledDDEHandlerValues
83 !insertmacro ChangeMUIHeaderImage
84 !insertmacro CheckForFilesInUse
85 !insertmacro CleanUpdateDirectories
86 !insertmacro CopyFilesFromDir
87 !insertmacro CreateRegKey
88 !insertmacro GetLongPath
89 !insertmacro GetPathFromString
90 !insertmacro GetParent
91 !insertmacro InitHashAppModelId
92 !insertmacro IsHandlerForInstallDir
93 !insertmacro IsPinnedToTaskBar
94 !insertmacro IsUserAdmin
95 !insertmacro LogDesktopShortcut
96 !insertmacro LogQuickLaunchShortcut
97 !insertmacro LogStartMenuShortcut
98 !insertmacro ManualCloseAppPrompt
99 !insertmacro OnStubInstallUninstall
100 !insertmacro PinnedToStartMenuLnkCount
101 !insertmacro RegCleanAppHandler
102 !insertmacro RegCleanMain
103 !insertmacro RegCleanUninstall
104 !ifdef MOZ_METRO
105 !insertmacro RemoveDEHRegistrationIfMatching
106 !endif
107 !insertmacro SetAppLSPCategories
108 !insertmacro SetBrandNameVars
109 !insertmacro UpdateShortcutAppModelIDs
110 !insertmacro UnloadUAC
111 !insertmacro WriteRegStr2
112 !insertmacro WriteRegDWORD2
113 !insertmacro CheckIfRegistryKeyExists
114
115 !include shared.nsh
116
117 ; Helper macros for ui callbacks. Insert these after shared.nsh
118 !insertmacro CheckCustomCommon
119 !insertmacro InstallEndCleanupCommon
120 !insertmacro InstallOnInitCommon
121 !insertmacro InstallStartCleanupCommon
122 !insertmacro LeaveDirectoryCommon
123 !insertmacro LeaveOptionsCommon
124 !insertmacro OnEndCommon
125 !insertmacro PreDirectoryCommon
126
127 Name "${BrandFullName}"
128 OutFile "setup.exe"
129 !ifdef HAVE_64BIT_OS
130 InstallDir "$PROGRAMFILES64\${BrandFullName}\"
131 !else
132 InstallDir "$PROGRAMFILES32\${BrandFullName}\"
133 !endif
134 ShowInstDetails nevershow
135
136 ################################################################################
137 # Modern User Interface - MUI
138
139 !define MOZ_MUI_CUSTOM_ABORT
140 !define MUI_CUSTOMFUNCTION_ABORT "CustomAbort"
141 !define MUI_ICON setup.ico
142 !define MUI_UNICON setup.ico
143 !define MUI_WELCOMEPAGE_TITLE_3LINES
144 !define MUI_HEADERIMAGE
145 !define MUI_HEADERIMAGE_RIGHT
146 !define MUI_WELCOMEFINISHPAGE_BITMAP wizWatermark.bmp
147
148 ; Use a right to left header image when the language is right to left
149 !ifdef ${AB_CD}_rtl
150 !define MUI_HEADERIMAGE_BITMAP_RTL wizHeaderRTL.bmp
151 !else
152 !define MUI_HEADERIMAGE_BITMAP wizHeader.bmp
153 !endif
154
155 /**
156 * Installation Pages
157 */
158 ; Welcome Page
159 !define MUI_PAGE_CUSTOMFUNCTION_PRE preWelcome
160 !insertmacro MUI_PAGE_WELCOME
161
162 ; Custom Options Page
163 Page custom preOptions leaveOptions
164
165 ; Select Install Directory Page
166 !define MUI_PAGE_CUSTOMFUNCTION_PRE preDirectory
167 !define MUI_PAGE_CUSTOMFUNCTION_LEAVE leaveDirectory
168 !define MUI_DIRECTORYPAGE_VERIFYONLEAVE
169 !insertmacro MUI_PAGE_DIRECTORY
170
171 ; Custom Components Page
172 !ifdef MOZ_MAINTENANCE_SERVICE
173 Page custom preComponents leaveComponents
174 !endif
175
176 ; Custom Shortcuts Page
177 Page custom preShortcuts leaveShortcuts
178
179 ; Custom Summary Page
180 Page custom preSummary leaveSummary
181
182 ; Install Files Page
183 !insertmacro MUI_PAGE_INSTFILES
184
185 ; Finish Page
186 !define MUI_FINISHPAGE_TITLE_3LINES
187 !define MUI_FINISHPAGE_RUN
188 !define MUI_FINISHPAGE_RUN_FUNCTION LaunchApp
189 !define MUI_FINISHPAGE_RUN_TEXT $(LAUNCH_TEXT)
190 !define MUI_PAGE_CUSTOMFUNCTION_PRE preFinish
191 !insertmacro MUI_PAGE_FINISH
192
193 ; Use the default dialog for IDD_VERIFY for a simple Banner
194 ChangeUI IDD_VERIFY "${NSISDIR}\Contrib\UIs\default.exe"
195
196 ################################################################################
197 # Install Sections
198
199 ; Cleanup operations to perform at the start of the installation.
200 Section "-InstallStartCleanup"
201 SetDetailsPrint both
202 DetailPrint $(STATUS_CLEANUP)
203 SetDetailsPrint none
204
205 SetOutPath "$INSTDIR"
206 ${StartInstallLog} "${BrandFullName}" "${AB_CD}" "${AppVersion}" "${GREVersion}"
207
208 StrCpy $PreventRebootRequired "false"
209 ${GetParameters} $R8
210 ${GetOptions} "$R8" "/INI=" $R7
211 ${Unless} ${Errors}
212 ; The configuration file must also exist
213 ${If} ${FileExists} "$R7"
214 ReadINIStr $R8 $R7 "Install" "PreventRebootRequired"
215 ${If} $R8 == "true"
216 StrCpy $PreventRebootRequired "true"
217 StrCpy $R2 "false"
218 StrCpy $R3 "false"
219 ${OnStubInstallUninstall} "$R2" "$R3"
220 ${EndIf}
221 ${EndIf}
222 ${EndUnless}
223
224 ; Delete the app exe if present to prevent launching the app while we are
225 ; installing.
226 ClearErrors
227 ${DeleteFile} "$INSTDIR\${FileMainEXE}"
228 ${If} ${Errors}
229 ; If the user closed the application it can take several seconds for it to
230 ; shut down completely. If the application is being used by another user we
231 ; can rename the file and then delete is when the system is restarted.
232 Sleep 5000
233 ${DeleteFile} "$INSTDIR\${FileMainEXE}"
234 ClearErrors
235 ${EndIf}
236
237 ; setup the application model id registration value
238 ${InitHashAppModelId} "$INSTDIR" "Software\Mozilla\${AppName}\TaskBarIDs"
239
240 ; Remove the updates directory for Vista and above
241 ${CleanUpdateDirectories} "Mozilla\Firefox" "Mozilla\updates"
242
243 ${RemoveDeprecatedFiles}
244
245 ${InstallStartCleanupCommon}
246 SectionEnd
247
248 Section "-Application" APP_IDX
249 ${StartUninstallLog}
250
251 SetDetailsPrint both
252 DetailPrint $(STATUS_INSTALL_APP)
253 SetDetailsPrint none
254
255 RmDir /r /REBOOTOK "$INSTDIR\${TO_BE_DELETED}"
256
257 ${LogHeader} "Installing Main Files"
258 ${CopyFilesFromDir} "$EXEDIR\core" "$INSTDIR" \
259 "$(ERROR_CREATE_DIRECTORY_PREFIX)" \
260 "$(ERROR_CREATE_DIRECTORY_SUFFIX)"
261
262 ; Register DLLs
263 ; XXXrstrong - AccessibleMarshal.dll can be used by multiple applications but
264 ; is only registered for the last application installed. When the last
265 ; application installed is uninstalled AccessibleMarshal.dll will no longer be
266 ; registered. bug 338878
267 ${LogHeader} "DLL Registration"
268 ClearErrors
269 ${RegisterDLL} "$INSTDIR\AccessibleMarshal.dll"
270 ${If} ${Errors}
271 ${LogMsg} "** ERROR Registering: $INSTDIR\AccessibleMarshal.dll **"
272 ${Else}
273 ${LogUninstall} "DLLReg: \AccessibleMarshal.dll"
274 ${LogMsg} "Registered: $INSTDIR\AccessibleMarshal.dll"
275 ${EndIf}
276
277 ; Write extra files created by the application to the uninstall log so they
278 ; will be removed when the application is uninstalled. To remove an empty
279 ; directory write a bogus filename to the deepest directory and all empty
280 ; parent directories will be removed.
281 ${LogUninstall} "File: \components\compreg.dat"
282 ${LogUninstall} "File: \components\xpti.dat"
283 ${LogUninstall} "File: \active-update.xml"
284 ${LogUninstall} "File: \install.log"
285 ${LogUninstall} "File: \install_status.log"
286 ${LogUninstall} "File: \install_wizard.log"
287 ${LogUninstall} "File: \updates.xml"
288
289 ClearErrors
290
291 ; Default for creating Start Menu shortcut
292 ; (1 = create, 0 = don't create)
293 ${If} $AddStartMenuSC == ""
294 StrCpy $AddStartMenuSC "1"
295 ${EndIf}
296
297 ; Default for creating Quick Launch shortcut (1 = create, 0 = don't create)
298 ${If} $AddQuickLaunchSC == ""
299 ; Don't install the quick launch shortcut on Windows 7
300 ${If} ${AtLeastWin7}
301 StrCpy $AddQuickLaunchSC "0"
302 ${Else}
303 StrCpy $AddQuickLaunchSC "1"
304 ${EndIf}
305 ${EndIf}
306
307 ; Default for creating Desktop shortcut (1 = create, 0 = don't create)
308 ${If} $AddDesktopSC == ""
309 StrCpy $AddDesktopSC "1"
310 ${EndIf}
311
312 ${LogHeader} "Adding Registry Entries"
313 SetShellVarContext current ; Set SHCTX to HKCU
314 ${RegCleanMain} "Software\Mozilla"
315 ${RegCleanUninstall}
316 !ifdef MOZ_METRO
317 ${ResetWin8PromptKeys} "HKCU" ""
318 !endif
319 ${UpdateProtocolHandlers}
320
321 ClearErrors
322 WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test"
323 ${If} ${Errors}
324 StrCpy $TmpVal "HKCU" ; used primarily for logging
325 ${Else}
326 SetShellVarContext all ; Set SHCTX to HKLM
327 DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
328 StrCpy $TmpVal "HKLM" ; used primarily for logging
329 ${RegCleanMain} "Software\Mozilla"
330 ${RegCleanUninstall}
331 ${UpdateProtocolHandlers}
332
333 ReadRegStr $0 HKLM "Software\mozilla.org\Mozilla" "CurrentVersion"
334 ${If} "$0" != "${GREVersion}"
335 WriteRegStr HKLM "Software\mozilla.org\Mozilla" "CurrentVersion" "${GREVersion}"
336 ${EndIf}
337 ${EndIf}
338
339 ${RemoveDeprecatedKeys}
340
341 ; The previous installer adds several regsitry values to both HKLM and HKCU.
342 ; We now try to add to HKLM and if that fails to HKCU
343
344 ; The order that reg keys and values are added is important if you use the
345 ; uninstall log to remove them on uninstall. When using the uninstall log you
346 ; MUST add children first so they will be removed first on uninstall so they
347 ; will be empty when the key is deleted. This allows the uninstaller to
348 ; specify that only empty keys will be deleted.
349 ${SetAppKeys}
350
351 ${FixClassKeys}
352
353 ; Uninstall keys can only exist under HKLM on some versions of windows. Since
354 ; it doesn't cause problems always add them.
355 ${SetUninstallKeys}
356
357 ; On install always add the FirefoxHTML and FirefoxURL keys.
358 ; An empty string is used for the 5th param because FirefoxHTML is not a
359 ; protocol handler.
360 ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8
361 StrCpy $2 "$\"$8$\" -osint -url $\"%1$\""
362
363 ; In Win8, the delegate execute handler picks up the value in FirefoxURL and
364 ; FirefoxHTML to launch the desktop browser when it needs to.
365 ${AddDisabledDDEHandlerValues} "FirefoxHTML" "$2" "$8,1" \
366 "${AppRegName} Document" ""
367 ${AddDisabledDDEHandlerValues} "FirefoxURL" "$2" "$8,1" "${AppRegName} URL" \
368 "true"
369
370 ; For pre win8, the following keys should only be set if we can write to HKLM.
371 ; For post win8, the keys below get set in both HKLM and HKCU.
372 ${If} $TmpVal == "HKLM"
373 ; Set the Start Menu Internet and Vista Registered App HKLM registry keys.
374 ${SetStartMenuInternet} "HKLM"
375 ${FixShellIconHandler} "HKLM"
376
377 ; If we are writing to HKLM and create either the desktop or start menu
378 ; shortcuts set IconsVisible to 1 otherwise to 0.
379 ${StrFilter} "${FileMainEXE}" "+" "" "" $R9
380 StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo"
381 ${If} $AddDesktopSC == 1
382 ${OrIf} $AddStartMenuSC == 1
383 WriteRegDWORD HKLM "$0" "IconsVisible" 1
384 ${Else}
385 WriteRegDWORD HKLM "$0" "IconsVisible" 0
386 ${EndIf}
387 ${EndIf}
388
389 ${If} ${AtLeastWin8}
390 ; Set the Start Menu Internet and Vista Registered App HKCU registry keys.
391 ${SetStartMenuInternet} "HKCU"
392 ${FixShellIconHandler} "HKCU"
393
394 ; If we create either the desktop or start menu shortcuts, then
395 ; set IconsVisible to 1 otherwise to 0.
396 ${StrFilter} "${FileMainEXE}" "+" "" "" $R9
397 StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo"
398 ${If} $AddDesktopSC == 1
399 ${OrIf} $AddStartMenuSC == 1
400 WriteRegDWORD HKCU "$0" "IconsVisible" 1
401 ${Else}
402 WriteRegDWORD HKCU "$0" "IconsVisible" 0
403 ${EndIf}
404 !ifdef MOZ_METRO
405 ${CleanupMetroBrowserHandlerValues} ${DELEGATE_EXECUTE_HANDLER_ID} \
406 "FirefoxURL" \
407 "FirefoxHTML"
408 ${AddMetroBrowserHandlerValues} ${DELEGATE_EXECUTE_HANDLER_ID} \
409 "$INSTDIR\CommandExecuteHandler.exe" \
410 $AppUserModelID \
411 "FirefoxURL" \
412 "FirefoxHTML"
413 !else
414 ; The metro browser is not enabled by the mozconfig.
415 ${If} ${AtLeastWin8}
416 ${RemoveDEHRegistration} ${DELEGATE_EXECUTE_HANDLER_ID} \
417 $AppUserModelID \
418 "FirefoxURL" \
419 "FirefoxHTML"
420 ${EndIf}
421 !endif
422 ${EndIf}
423
424 !ifdef MOZ_MAINTENANCE_SERVICE
425 ; If the maintenance service page was displayed then a value was already
426 ; explicitly selected for installing the maintenance service and
427 ; and so InstallMaintenanceService will already be 0 or 1.
428 ; If the maintenance service page was not displayed then
429 ; InstallMaintenanceService will be equal to "".
430 ${If} $InstallMaintenanceService == ""
431 Call IsUserAdmin
432 Pop $R0
433 ${If} $R0 == "true"
434 ; Only proceed if we have HKLM write access
435 ${AndIf} $TmpVal == "HKLM"
436 ; On Windows 2000 we do not install the maintenance service.
437 ${AndIf} ${AtLeastWinXP}
438 ; The user is an admin so we should default to install service yes
439 StrCpy $InstallMaintenanceService "1"
440 ${Else}
441 ; The user is not admin so we should default to install service no
442 StrCpy $InstallMaintenanceService "0"
443 ${EndIf}
444 ${EndIf}
445
446 ${If} $InstallMaintenanceService == "1"
447 ; The user wants to install the maintenance service, so execute
448 ; the pre-packaged maintenance service installer.
449 ; This option can only be turned on if the user is an admin so there
450 ; is no need to use ExecShell w/ verb runas to enforce elevated.
451 nsExec::Exec "$\"$INSTDIR\maintenanceservice_installer.exe$\""
452 ${EndIf}
453 !endif
454
455 ; These need special handling on uninstall since they may be overwritten by
456 ; an install into a different location.
457 StrCpy $0 "Software\Microsoft\Windows\CurrentVersion\App Paths\${FileMainEXE}"
458 ${WriteRegStr2} $TmpVal "$0" "" "$INSTDIR\${FileMainEXE}" 0
459 ${WriteRegStr2} $TmpVal "$0" "Path" "$INSTDIR" 0
460
461 StrCpy $0 "Software\Microsoft\MediaPlayer\ShimInclusionList\$R9"
462 ${CreateRegKey} "$TmpVal" "$0" 0
463 StrCpy $0 "Software\Microsoft\MediaPlayer\ShimInclusionList\plugin-container.exe"
464 ${CreateRegKey} "$TmpVal" "$0" 0
465
466 ${If} $TmpVal == "HKLM"
467 ; Set the permitted LSP Categories for WinVista and above
468 ${SetAppLSPCategories} ${LSP_CATEGORIES}
469 ${EndIf}
470
471 ; Create shortcuts
472 ${LogHeader} "Adding Shortcuts"
473
474 ; Remove the start menu shortcuts and directory if the SMPROGRAMS section
475 ; exists in the shortcuts_log.ini and the SMPROGRAMS. The installer's shortcut
476 ; creation code will create the shortcut in the root of the Start Menu
477 ; Programs directory.
478 ${RemoveStartMenuDir}
479
480 ; Always add the application's shortcuts to the shortcuts log ini file. The
481 ; DeleteShortcuts macro will do the right thing on uninstall if the
482 ; shortcuts don't exist.
483 ${LogStartMenuShortcut} "${BrandFullName}.lnk"
484 ${LogQuickLaunchShortcut} "${BrandFullName}.lnk"
485 ${LogDesktopShortcut} "${BrandFullName}.lnk"
486
487 ; Best effort to update the Win7 taskbar and start menu shortcut app model
488 ; id's. The possible contexts are current user / system and the user that
489 ; elevated the installer.
490 Call FixShortcutAppModelIDs
491 ; If the current context is all also perform Win7 taskbar and start menu link
492 ; maintenance for the current user context.
493 ${If} $TmpVal == "HKLM"
494 SetShellVarContext current ; Set SHCTX to HKCU
495 Call FixShortcutAppModelIDs
496 SetShellVarContext all ; Set SHCTX to HKLM
497 ${EndIf}
498
499 ; If running elevated also perform Win7 taskbar and start menu link
500 ; maintenance for the unelevated user context in case that is different than
501 ; the current user.
502 ClearErrors
503 ${GetParameters} $0
504 ${GetOptions} "$0" "/UAC:" $0
505 ${Unless} ${Errors}
506 GetFunctionAddress $0 FixShortcutAppModelIDs
507 UAC::ExecCodeSegment $0
508 ${EndUnless}
509
510 ; UAC only allows elevating to an Admin account so there is no need to add
511 ; the Start Menu or Desktop shortcuts from the original unelevated process
512 ; since this will either add it for the user if unelevated or All Users if
513 ; elevated.
514 ${If} $AddStartMenuSC == 1
515 CreateShortCut "$SMPROGRAMS\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}"
516 ${If} ${FileExists} "$SMPROGRAMS\${BrandFullName}.lnk"
517 ShellLink::SetShortCutWorkingDirectory "$SMPROGRAMS\${BrandFullName}.lnk" \
518 "$INSTDIR"
519 ${If} ${AtLeastWin7}
520 ${AndIf} "$AppUserModelID" != ""
521 ApplicationID::Set "$SMPROGRAMS\${BrandFullName}.lnk" "$AppUserModelID" "true"
522 ${EndIf}
523 ${LogMsg} "Added Shortcut: $SMPROGRAMS\${BrandFullName}.lnk"
524 ${Else}
525 ${LogMsg} "** ERROR Adding Shortcut: $SMPROGRAMS\${BrandFullName}.lnk"
526 ${EndIf}
527 ${EndIf}
528
529 ${If} $AddDesktopSC == 1
530 CreateShortCut "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}"
531 ${If} ${FileExists} "$DESKTOP\${BrandFullName}.lnk"
532 ShellLink::SetShortCutWorkingDirectory "$DESKTOP\${BrandFullName}.lnk" \
533 "$INSTDIR"
534 ${If} ${AtLeastWin7}
535 ${AndIf} "$AppUserModelID" != ""
536 ApplicationID::Set "$DESKTOP\${BrandFullName}.lnk" "$AppUserModelID" "true"
537 ${EndIf}
538 ${LogMsg} "Added Shortcut: $DESKTOP\${BrandFullName}.lnk"
539 ${Else}
540 ${LogMsg} "** ERROR Adding Shortcut: $DESKTOP\${BrandFullName}.lnk"
541 ${EndIf}
542 ${EndIf}
543
544 ; If elevated the Quick Launch shortcut must be added from the unelevated
545 ; original process.
546 ${If} $AddQuickLaunchSC == 1
547 ${Unless} ${AtLeastWin7}
548 ClearErrors
549 ${GetParameters} $0
550 ${GetOptions} "$0" "/UAC:" $0
551 ${If} ${Errors}
552 Call AddQuickLaunchShortcut
553 ${LogMsg} "Added Shortcut: $QUICKLAUNCH\${BrandFullName}.lnk"
554 ${Else}
555 ; It is not possible to add a log entry from the unelevated process so
556 ; add the log entry without the path since there is no simple way to
557 ; know the correct full path.
558 ${LogMsg} "Added Quick Launch Shortcut: ${BrandFullName}.lnk"
559 GetFunctionAddress $0 AddQuickLaunchShortcut
560 UAC::ExecCodeSegment $0
561 ${EndIf}
562 ${EndUnless}
563 ${EndIf}
564
565 !ifdef MOZ_MAINTENANCE_SERVICE
566 ${If} $TmpVal == "HKLM"
567 ; Add the registry keys for allowed certificates.
568 ${AddMaintCertKeys}
569 ${EndIf}
570 !endif
571 SectionEnd
572
573 ; Cleanup operations to perform at the end of the installation.
574 Section "-InstallEndCleanup"
575 SetDetailsPrint both
576 DetailPrint "$(STATUS_CLEANUP)"
577 SetDetailsPrint none
578
579 ${Unless} ${Silent}
580 ${MUI_INSTALLOPTIONS_READ} $0 "summary.ini" "Field 4" "State"
581 ${If} "$0" == "1"
582 ${LogHeader} "Setting as the default browser"
583 ClearErrors
584 ${GetParameters} $0
585 ${GetOptions} "$0" "/UAC:" $0
586 ${If} ${Errors}
587 Call SetAsDefaultAppUserHKCU
588 ${Else}
589 GetFunctionAddress $0 SetAsDefaultAppUserHKCU
590 UAC::ExecCodeSegment $0
591 ${EndIf}
592 ${EndIf}
593 ; Adds a pinned Task Bar shortcut (see MigrateTaskBarShortcut for details).
594 ${MigrateTaskBarShortcut}
595 ${EndUnless}
596
597 ${GetShortcutsLogPath} $0
598 WriteIniStr "$0" "TASKBAR" "Migrated" "true"
599
600 ; Refresh desktop icons
601 System::Call "shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_DWORDFLUSH}, i 0, i 0)"
602
603 ${InstallEndCleanupCommon}
604
605 ${If} $PreventRebootRequired == "true"
606 SetRebootFlag false
607 ${EndIf}
608
609 ${If} ${RebootFlag}
610 ; When a reboot is required give SHChangeNotify time to finish the
611 ; refreshing the icons so the OS doesn't display the icons from helper.exe
612 Sleep 10000
613 ${LogHeader} "Reboot Required To Finish Installation"
614 ; ${FileMainEXE}.moz-upgrade should never exist but just in case...
615 ${Unless} ${FileExists} "$INSTDIR\${FileMainEXE}.moz-upgrade"
616 Rename "$INSTDIR\${FileMainEXE}" "$INSTDIR\${FileMainEXE}.moz-upgrade"
617 ${EndUnless}
618
619 ${If} ${FileExists} "$INSTDIR\${FileMainEXE}"
620 ClearErrors
621 Rename "$INSTDIR\${FileMainEXE}" "$INSTDIR\${FileMainEXE}.moz-delete"
622 ${Unless} ${Errors}
623 Delete /REBOOTOK "$INSTDIR\${FileMainEXE}.moz-delete"
624 ${EndUnless}
625 ${EndIf}
626
627 ${Unless} ${FileExists} "$INSTDIR\${FileMainEXE}"
628 CopyFiles /SILENT "$INSTDIR\uninstall\helper.exe" "$INSTDIR"
629 FileOpen $0 "$INSTDIR\${FileMainEXE}" w
630 FileWrite $0 "Will be deleted on restart"
631 Rename /REBOOTOK "$INSTDIR\${FileMainEXE}.moz-upgrade" "$INSTDIR\${FileMainEXE}"
632 FileClose $0
633 Delete "$INSTDIR\${FileMainEXE}"
634 Rename "$INSTDIR\helper.exe" "$INSTDIR\${FileMainEXE}"
635 ${EndUnless}
636 ${EndIf}
637 SectionEnd
638
639 ################################################################################
640 # Install Abort Survey Functions
641
642 Function CustomAbort
643 ${If} "${AB_CD}" == "en-US"
644 ${AndIf} "$PageName" != ""
645 ${AndIf} ${FileExists} "$EXEDIR\core\distribution\distribution.ini"
646 ReadINIStr $0 "$EXEDIR\core\distribution\distribution.ini" "Global" "about"
647 ClearErrors
648 ${WordFind} "$0" "Funnelcake" "E#" $1
649 ${Unless} ${Errors}
650 ; Yes = fill out the survey and exit, No = don't fill out survey and exit,
651 ; Cancel = don't exit.
652 MessageBox MB_YESNO|MB_ICONEXCLAMATION \
653 "Would you like to tell us why you are canceling this installation?" \
654 IDYes +1 IDNO CustomAbort_finish
655 ${If} "$PageName" == "Welcome"
656 GetFunctionAddress $0 AbortSurveyWelcome
657 ${ElseIf} "$PageName" == "Options"
658 GetFunctionAddress $0 AbortSurveyOptions
659 ${ElseIf} "$PageName" == "Directory"
660 GetFunctionAddress $0 AbortSurveyDirectory
661 ${ElseIf} "$PageName" == "Shortcuts"
662 GetFunctionAddress $0 AbortSurveyShortcuts
663 ${ElseIf} "$PageName" == "Summary"
664 GetFunctionAddress $0 AbortSurveySummary
665 ${EndIf}
666 ClearErrors
667 ${GetParameters} $1
668 ${GetOptions} "$1" "/UAC:" $2
669 ${If} ${Errors}
670 Call $0
671 ${Else}
672 UAC::ExecCodeSegment $0
673 ${EndIf}
674
675 CustomAbort_finish:
676 Return
677 ${EndUnless}
678 ${EndIf}
679
680 MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(MOZ_MUI_TEXT_ABORTWARNING)" \
681 IDYES +1 IDNO +2
682 Return
683 Abort
684 FunctionEnd
685
686 Function AbortSurveyWelcome
687 ExecShell "open" "${AbortSurveyURL}step1"
688 FunctionEnd
689
690 Function AbortSurveyOptions
691 ExecShell "open" "${AbortSurveyURL}step2"
692 FunctionEnd
693
694 Function AbortSurveyDirectory
695 ExecShell "open" "${AbortSurveyURL}step3"
696 FunctionEnd
697
698 Function AbortSurveyShortcuts
699 ExecShell "open" "${AbortSurveyURL}step4"
700 FunctionEnd
701
702 Function AbortSurveySummary
703 ExecShell "open" "${AbortSurveyURL}step5"
704 FunctionEnd
705
706 ################################################################################
707 # Helper Functions
708
709 Function AddQuickLaunchShortcut
710 CreateShortCut "$QUICKLAUNCH\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}"
711 ${If} ${FileExists} "$QUICKLAUNCH\${BrandFullName}.lnk"
712 ShellLink::SetShortCutWorkingDirectory "$QUICKLAUNCH\${BrandFullName}.lnk" \
713 "$INSTDIR"
714 ${EndIf}
715 FunctionEnd
716
717 Function CheckExistingInstall
718 ; If there is a pending file copy from a previous upgrade don't allow
719 ; installing until after the system has rebooted.
720 IfFileExists "$INSTDIR\${FileMainEXE}.moz-upgrade" +1 +4
721 MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(WARN_RESTART_REQUIRED_UPGRADE)" IDNO +2
722 Reboot
723 Quit
724
725 ; If there is a pending file deletion from a previous uninstall don't allow
726 ; installing until after the system has rebooted.
727 IfFileExists "$INSTDIR\${FileMainEXE}.moz-delete" +1 +4
728 MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(WARN_RESTART_REQUIRED_UNINSTALL)" IDNO +2
729 Reboot
730 Quit
731
732 ${If} ${FileExists} "$INSTDIR\${FileMainEXE}"
733 ; Disable the next, cancel, and back buttons
734 GetDlgItem $0 $HWNDPARENT 1 ; Next button
735 EnableWindow $0 0
736 GetDlgItem $0 $HWNDPARENT 2 ; Cancel button
737 EnableWindow $0 0
738 GetDlgItem $0 $HWNDPARENT 3 ; Back button
739 EnableWindow $0 0
740
741 Banner::show /NOUNLOAD "$(BANNER_CHECK_EXISTING)"
742
743 ${If} "$TmpVal" == "FoundMessageWindow"
744 Sleep 5000
745 ${EndIf}
746
747 ${PushFilesToCheck}
748
749 ; Store the return value in $TmpVal so it is less likely to be accidentally
750 ; overwritten elsewhere.
751 ${CheckForFilesInUse} $TmpVal
752
753 Banner::destroy
754
755 ; Enable the next, cancel, and back buttons
756 GetDlgItem $0 $HWNDPARENT 1 ; Next button
757 EnableWindow $0 1
758 GetDlgItem $0 $HWNDPARENT 2 ; Cancel button
759 EnableWindow $0 1
760 GetDlgItem $0 $HWNDPARENT 3 ; Back button
761 EnableWindow $0 1
762
763 ${If} "$TmpVal" == "true"
764 StrCpy $TmpVal "FoundMessageWindow"
765 ${ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_INSTALL)"
766 StrCpy $TmpVal "true"
767 ${EndIf}
768 ${EndIf}
769 FunctionEnd
770
771 Function LaunchApp
772 ${ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_LAUNCH)"
773
774 ClearErrors
775 ${GetParameters} $0
776 ${GetOptions} "$0" "/UAC:" $1
777 ${If} ${Errors}
778 StrCpy $1 "0"
779 StrCpy $2 "0"
780 !ifdef MOZ_METRO
781 ; Check to see if this install location is currently set as the
782 ; default browser.
783 AppAssocReg::QueryAppIsDefaultAll "${AppRegName}" "effective"
784 Pop $1
785 ; Check for a last run type to see if metro was the last browser
786 ; front end in use.
787 ReadRegDWORD $2 HKCU "Software\Mozilla\Firefox" "MetroLastAHE"
788 !endif
789 ${If} $1 == "1"
790 ${AndIf} $2 == "1" ; 1 equals AHE_IMMERSIVE
791 ; Launch into metro
792 Exec "$\"$INSTDIR\CommandExecuteHandler.exe$\" --launchmetro"
793 ${Else}
794 ; Launch into desktop
795 Exec "$\"$INSTDIR\${FileMainEXE}$\""
796 ${EndIf}
797 ${Else}
798 GetFunctionAddress $0 LaunchAppFromElevatedProcess
799 UAC::ExecCodeSegment $0
800 ${EndIf}
801 FunctionEnd
802
803 Function LaunchAppFromElevatedProcess
804 ; Find the installation directory when launching using GetFunctionAddress
805 ; from an elevated installer since $INSTDIR will not be set in this installer
806 ${StrFilter} "${FileMainEXE}" "+" "" "" $R9
807 ReadRegStr $0 HKLM "Software\Clients\StartMenuInternet\$R9\DefaultIcon" ""
808 ${GetPathFromString} "$0" $0
809 ${GetParent} "$0" $1
810 ; Set our current working directory to the application's install directory
811 ; otherwise the 7-Zip temp directory will be in use and won't be deleted.
812 SetOutPath "$1"
813 StrCpy $2 "0"
814 StrCpy $3 "0"
815 !ifdef MOZ_METRO
816 ; Check to see if this install location is currently set as the
817 ; default browser.
818 AppAssocReg::QueryAppIsDefaultAll "${AppRegName}" "effective"
819 Pop $2
820 ; Check for a last run type to see if metro was the last browser
821 ; front end in use.
822 ReadRegDWORD $3 HKCU "Software\Mozilla\Firefox" "MetroLastAHE"
823 !endif
824 ${If} $2 == "1"
825 ${AndIf} $3 == "1" ; 1 equals AHE_IMMERSIVE
826 ; Launch into metro
827 Exec "$\"$1\CommandExecuteHandler.exe$\" --launchmetro"
828 ${Else}
829 ; Launch into desktop
830 Exec "$\"$0$\""
831 ${EndIf}
832 FunctionEnd
833
834 ################################################################################
835 # Language
836
837 !insertmacro MOZ_MUI_LANGUAGE 'baseLocale'
838 !verbose push
839 !verbose 3
840 !include "overrideLocale.nsh"
841 !include "customLocale.nsh"
842 !verbose pop
843
844 ; Set this after the locale files to override it if it is in the locale
845 ; using " " for BrandingText will hide the "Nullsoft Install System..." branding
846 BrandingText " "
847
848 ################################################################################
849 # Page pre, show, and leave functions
850
851 Function preWelcome
852 StrCpy $PageName "Welcome"
853 ${If} ${FileExists} "$EXEDIR\core\distribution\modern-wizard.bmp"
854 Delete "$PLUGINSDIR\modern-wizard.bmp"
855 CopyFiles /SILENT "$EXEDIR\core\distribution\modern-wizard.bmp" "$PLUGINSDIR\modern-wizard.bmp"
856 ${EndIf}
857 FunctionEnd
858
859 Function preOptions
860 StrCpy $PageName "Options"
861 ${If} ${FileExists} "$EXEDIR\core\distribution\modern-header.bmp"
862 ${AndIf} $hHeaderBitmap == ""
863 Delete "$PLUGINSDIR\modern-header.bmp"
864 CopyFiles /SILENT "$EXEDIR\core\distribution\modern-header.bmp" "$PLUGINSDIR\modern-header.bmp"
865 ${ChangeMUIHeaderImage} "$PLUGINSDIR\modern-header.bmp"
866 ${EndIf}
867 !insertmacro MUI_HEADER_TEXT "$(OPTIONS_PAGE_TITLE)" "$(OPTIONS_PAGE_SUBTITLE)"
868 !insertmacro MUI_INSTALLOPTIONS_DISPLAY "options.ini"
869 FunctionEnd
870
871 Function leaveOptions
872 ${MUI_INSTALLOPTIONS_READ} $0 "options.ini" "Settings" "State"
873 ${If} $0 != 0
874 Abort
875 ${EndIf}
876 ${MUI_INSTALLOPTIONS_READ} $R0 "options.ini" "Field 2" "State"
877 StrCmp $R0 "1" +1 +2
878 StrCpy $InstallType ${INSTALLTYPE_BASIC}
879 ${MUI_INSTALLOPTIONS_READ} $R0 "options.ini" "Field 3" "State"
880 StrCmp $R0 "1" +1 +2
881 StrCpy $InstallType ${INSTALLTYPE_CUSTOM}
882
883 ${LeaveOptionsCommon}
884
885 ${If} $InstallType == ${INSTALLTYPE_BASIC}
886 Call CheckExistingInstall
887 ${EndIf}
888 FunctionEnd
889
890 Function preDirectory
891 StrCpy $PageName "Directory"
892 ${PreDirectoryCommon}
893 FunctionEnd
894
895 Function leaveDirectory
896 ${If} $InstallType == ${INSTALLTYPE_BASIC}
897 Call CheckExistingInstall
898 ${EndIf}
899 ${LeaveDirectoryCommon} "$(WARN_DISK_SPACE)" "$(WARN_WRITE_ACCESS)"
900 FunctionEnd
901
902 Function preShortcuts
903 StrCpy $PageName "Shortcuts"
904 ${CheckCustomCommon}
905 !insertmacro MUI_HEADER_TEXT "$(SHORTCUTS_PAGE_TITLE)" "$(SHORTCUTS_PAGE_SUBTITLE)"
906 !insertmacro MUI_INSTALLOPTIONS_DISPLAY "shortcuts.ini"
907 FunctionEnd
908
909 Function leaveShortcuts
910 ${MUI_INSTALLOPTIONS_READ} $0 "shortcuts.ini" "Settings" "State"
911 ${If} $0 != 0
912 Abort
913 ${EndIf}
914 ${MUI_INSTALLOPTIONS_READ} $AddDesktopSC "shortcuts.ini" "Field 2" "State"
915
916 ; If we have a Metro browser and are Win8, then we don't have a Field 3
917 !ifdef MOZ_METRO
918 ${Unless} ${AtLeastWin8}
919 !endif
920 ${MUI_INSTALLOPTIONS_READ} $AddStartMenuSC "shortcuts.ini" "Field 3" "State"
921 !ifdef MOZ_METRO
922 ${EndIf}
923 !endif
924
925 ; Don't install the quick launch shortcut on Windows 7
926 ${Unless} ${AtLeastWin7}
927 ${MUI_INSTALLOPTIONS_READ} $AddQuickLaunchSC "shortcuts.ini" "Field 4" "State"
928 ${EndUnless}
929
930 ${If} $InstallType == ${INSTALLTYPE_CUSTOM}
931 Call CheckExistingInstall
932 ${EndIf}
933 FunctionEnd
934
935 !ifdef MOZ_MAINTENANCE_SERVICE
936 Function preComponents
937 ; If the service already exists, don't show this page
938 ServicesHelper::IsInstalled "MozillaMaintenance"
939 Pop $R9
940 ${If} $R9 == 1
941 ; The service already exists so don't show this page.
942 Abort
943 ${EndIf}
944
945 ; On Windows 2000 we do not install the maintenance service.
946 ${Unless} ${AtLeastWinXP}
947 Abort
948 ${EndUnless}
949
950 ; Don't show the custom components page if the
951 ; user is not an admin
952 Call IsUserAdmin
953 Pop $R9
954 ${If} $R9 != "true"
955 Abort
956 ${EndIf}
957
958 ; Only show the maintenance service page if we have write access to HKLM
959 ClearErrors
960 WriteRegStr HKLM "Software\Mozilla" \
961 "${BrandShortName}InstallerTest" "Write Test"
962 ${If} ${Errors}
963 ClearErrors
964 Abort
965 ${Else}
966 DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
967 ${EndIf}
968
969 StrCpy $PageName "Components"
970 ${CheckCustomCommon}
971 !insertmacro MUI_HEADER_TEXT "$(COMPONENTS_PAGE_TITLE)" "$(COMPONENTS_PAGE_SUBTITLE)"
972 !insertmacro MUI_INSTALLOPTIONS_DISPLAY "components.ini"
973 FunctionEnd
974
975 Function leaveComponents
976 ${MUI_INSTALLOPTIONS_READ} $0 "components.ini" "Settings" "State"
977 ${If} $0 != 0
978 Abort
979 ${EndIf}
980 ${MUI_INSTALLOPTIONS_READ} $InstallMaintenanceService "components.ini" "Field 2" "State"
981 ${If} $InstallType == ${INSTALLTYPE_CUSTOM}
982 Call CheckExistingInstall
983 ${EndIf}
984 FunctionEnd
985 !endif
986
987 Function preSummary
988 StrCpy $PageName "Summary"
989 ; Setup the summary.ini file for the Custom Summary Page
990 WriteINIStr "$PLUGINSDIR\summary.ini" "Settings" NumFields "3"
991
992 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Type "label"
993 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Text "$(SUMMARY_INSTALLED_TO)"
994 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Left "0"
995 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Right "-1"
996 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Top "5"
997 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Bottom "15"
998
999 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Type "text"
1000 ; The contents of this control must be set as follows in the pre function
1001 ; ${MUI_INSTALLOPTIONS_READ} $1 "summary.ini" "Field 2" "HWND"
1002 ; SendMessage $1 ${WM_SETTEXT} 0 "STR:$INSTDIR"
1003 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" state ""
1004 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Left "0"
1005 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Right "-1"
1006 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Top "17"
1007 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Bottom "30"
1008 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" flags "READONLY"
1009
1010 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Type "label"
1011 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Left "0"
1012 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Right "-1"
1013 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Top "130"
1014 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Bottom "150"
1015
1016 ${If} ${FileExists} "$INSTDIR\${FileMainEXE}"
1017 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Text "$(SUMMARY_UPGRADE_CLICK)"
1018 WriteINIStr "$PLUGINSDIR\summary.ini" "Settings" NextButtonText "$(UPGRADE_BUTTON)"
1019 ${Else}
1020 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Text "$(SUMMARY_INSTALL_CLICK)"
1021 DeleteINIStr "$PLUGINSDIR\summary.ini" "Settings" NextButtonText
1022 ${EndIf}
1023
1024
1025 ; Remove the "Field 4" ini section in case the user hits back and changes the
1026 ; installation directory which could change whether the make default checkbox
1027 ; should be displayed.
1028 DeleteINISec "$PLUGINSDIR\summary.ini" "Field 4"
1029
1030 ; Check if it is possible to write to HKLM
1031 ClearErrors
1032 WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test"
1033 ${Unless} ${Errors}
1034 DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
1035 ; Check if Firefox is the http handler for this user.
1036 SetShellVarContext current ; Set SHCTX to the current user
1037 ${IsHandlerForInstallDir} "http" $R9
1038 ${If} $TmpVal == "HKLM"
1039 SetShellVarContext all ; Set SHCTX to all users
1040 ${EndIf}
1041 ; If Firefox isn't the http handler for this user show the option to set
1042 ; Firefox as the default browser.
1043 ${If} "$R9" != "true"
1044 ${AndIf} ${AtMostWin2008R2}
1045 WriteINIStr "$PLUGINSDIR\summary.ini" "Settings" NumFields "4"
1046 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Type "checkbox"
1047 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Text "$(SUMMARY_TAKE_DEFAULTS)"
1048 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Left "0"
1049 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Right "-1"
1050 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" State "1"
1051 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Top "32"
1052 WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Bottom "53"
1053 ${EndIf}
1054 ${EndUnless}
1055
1056 ${If} "$TmpVal" == "true"
1057 ; If there is already a Type entry in the "Field 4" section with a value of
1058 ; checkbox then the set as the default browser checkbox is displayed and
1059 ; this text must be moved below it.
1060 ReadINIStr $0 "$PLUGINSDIR\summary.ini" "Field 4" "Type"
1061 ${If} "$0" == "checkbox"
1062 StrCpy $0 "5"
1063 WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Top "53"
1064 WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Bottom "68"
1065 ${Else}
1066 StrCpy $0 "4"
1067 WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Top "35"
1068 WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Bottom "50"
1069 ${EndIf}
1070 WriteINIStr "$PLUGINSDIR\summary.ini" "Settings" NumFields "$0"
1071
1072 WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Type "label"
1073 WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Text "$(SUMMARY_REBOOT_REQUIRED_INSTALL)"
1074 WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Left "0"
1075 WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Right "-1"
1076 ${EndIf}
1077
1078 !insertmacro MUI_HEADER_TEXT "$(SUMMARY_PAGE_TITLE)" "$(SUMMARY_PAGE_SUBTITLE)"
1079
1080 ; The Summary custom page has a textbox that will automatically receive
1081 ; focus. This sets the focus to the Install button instead.
1082 !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "summary.ini"
1083 GetDlgItem $0 $HWNDPARENT 1
1084 System::Call "user32::SetFocus(i r0, i 0x0007, i,i)i"
1085 ${MUI_INSTALLOPTIONS_READ} $1 "summary.ini" "Field 2" "HWND"
1086 SendMessage $1 ${WM_SETTEXT} 0 "STR:$INSTDIR"
1087 !insertmacro MUI_INSTALLOPTIONS_SHOW
1088 FunctionEnd
1089
1090 Function leaveSummary
1091 ; Try to delete the app executable and if we can't delete it try to find the
1092 ; app's message window and prompt the user to close the app. This allows
1093 ; running an instance that is located in another directory. If for whatever
1094 ; reason there is no message window we will just rename the app's files and
1095 ; then remove them on restart.
1096 ClearErrors
1097 ${DeleteFile} "$INSTDIR\${FileMainEXE}"
1098 ${If} ${Errors}
1099 ${ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_INSTALL)"
1100 ${EndIf}
1101 FunctionEnd
1102
1103 ; When we add an optional action to the finish page the cancel button is
1104 ; enabled. This disables it and leaves the finish button as the only choice.
1105 Function preFinish
1106 StrCpy $PageName ""
1107 ${EndInstallLog} "${BrandFullName}"
1108 !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "settings" "cancelenabled" "0"
1109 FunctionEnd
1110
1111 ################################################################################
1112 # Initialization Functions
1113
1114 Function .onInit
1115 ; Remove the current exe directory from the search order.
1116 ; This only effects LoadLibrary calls and not implicitly loaded DLLs.
1117 System::Call 'kernel32::SetDllDirectoryW(w "")'
1118
1119 StrCpy $PageName ""
1120 StrCpy $LANGUAGE 0
1121 ${SetBrandNameVars} "$EXEDIR\core\distribution\setup.ini"
1122
1123 ${InstallOnInitCommon} "$(WARN_MIN_SUPPORTED_OS_MSG)"
1124
1125 ; The commands inside this ifndef are needed prior to NSIS 3.0a2 and can be
1126 ; removed after we require NSIS 3.0a2 or greater.
1127 !ifndef NSIS_PACKEDVERSION
1128 ${If} ${AtLeastWinVista}
1129 System::Call 'user32::SetProcessDPIAware()'
1130 ${EndIf}
1131 !endif
1132
1133 !insertmacro InitInstallOptionsFile "options.ini"
1134 !insertmacro InitInstallOptionsFile "shortcuts.ini"
1135 !insertmacro InitInstallOptionsFile "components.ini"
1136 !insertmacro InitInstallOptionsFile "summary.ini"
1137
1138 WriteINIStr "$PLUGINSDIR\options.ini" "Settings" NumFields "5"
1139
1140 WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Type "label"
1141 WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Text "$(OPTIONS_SUMMARY)"
1142 WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Left "0"
1143 WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Right "-1"
1144 WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Top "0"
1145 WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Bottom "10"
1146
1147 WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Type "RadioButton"
1148 WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Text "$(OPTION_STANDARD_RADIO)"
1149 WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Left "0"
1150 WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Right "-1"
1151 WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Top "25"
1152 WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Bottom "35"
1153 WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" State "1"
1154 WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Flags "GROUP"
1155
1156 WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Type "RadioButton"
1157 WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Text "$(OPTION_CUSTOM_RADIO)"
1158 WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Left "0"
1159 WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Right "-1"
1160 WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Top "55"
1161 WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Bottom "65"
1162 WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" State "0"
1163
1164 WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Type "label"
1165 WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Text "$(OPTION_STANDARD_DESC)"
1166 WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Left "15"
1167 WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Right "-1"
1168 WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Top "37"
1169 WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Bottom "57"
1170
1171 WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Type "label"
1172 WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Text "$(OPTION_CUSTOM_DESC)"
1173 WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Left "15"
1174 WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Right "-1"
1175 WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Top "67"
1176 WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Bottom "87"
1177
1178 ; Setup the shortcuts.ini file for the Custom Shortcuts Page
1179 ; Don't offer to install the quick launch shortcut on Windows 7
1180 ${If} ${AtLeastWin7}
1181 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Settings" NumFields "3"
1182 ${Else}
1183 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Settings" NumFields "4"
1184 ${EndIf}
1185
1186 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Type "label"
1187 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Text "$(CREATE_ICONS_DESC)"
1188 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Left "0"
1189 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Right "-1"
1190 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Top "5"
1191 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Bottom "15"
1192
1193 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Type "checkbox"
1194 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Text "$(ICONS_DESKTOP)"
1195 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Left "0"
1196 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Right "-1"
1197 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Top "20"
1198 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Bottom "30"
1199 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" State "1"
1200 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Flags "GROUP"
1201
1202 ; Don't offer to install the start menu shortcut on Windows 8
1203 ; for Metro builds.
1204 !ifdef MOZ_METRO
1205 ${Unless} ${AtLeastWin8}
1206 !endif
1207 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Type "checkbox"
1208 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Text "$(ICONS_STARTMENU)"
1209 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Left "0"
1210 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Right "-1"
1211 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Top "40"
1212 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Bottom "50"
1213 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" State "1"
1214 !ifdef MOZ_METRO
1215 ${EndIf}
1216 !endif
1217
1218 ; Don't offer to install the quick launch shortcut on Windows 7
1219 ${Unless} ${AtLeastWin7}
1220 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Type "checkbox"
1221 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Text "$(ICONS_QUICKLAUNCH)"
1222 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Left "0"
1223 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Right "-1"
1224 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Top "60"
1225 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Bottom "70"
1226 WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" State "1"
1227 ${EndUnless}
1228
1229 ; Setup the components.ini file for the Components Page
1230 WriteINIStr "$PLUGINSDIR\components.ini" "Settings" NumFields "2"
1231
1232 WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Type "label"
1233 WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Text "$(OPTIONAL_COMPONENTS_DESC)"
1234 WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Left "0"
1235 WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Right "-1"
1236 WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Top "5"
1237 WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Bottom "25"
1238
1239 WriteINIStr "$PLUGINSDIR\components.ini" "Field 2" Type "checkbox"
1240 WriteINIStr "$PLUGINSDIR\components.ini" "Field 2" Text "$(MAINTENANCE_SERVICE_CHECKBOX_DESC)"
1241 WriteINIStr "$PLUGINSDIR\components.ini" "Field 2" Left "0"
1242 WriteINIStr "$PLUGINSDIR\components.ini" "Field 2" Right "-1"
1243 WriteINIStr "$PLUGINSDIR\components.ini" "Field 2" Top "27"
1244 WriteINIStr "$PLUGINSDIR\components.ini" "Field 2" Bottom "37"
1245 WriteINIStr "$PLUGINSDIR\components.ini" "Field 2" State "1"
1246 WriteINIStr "$PLUGINSDIR\components.ini" "Field 2" Flags "GROUP"
1247
1248 ; There must always be a core directory.
1249 ${GetSize} "$EXEDIR\core\" "/S=0K" $R5 $R7 $R8
1250 SectionSetSize ${APP_IDX} $R5
1251
1252 ; Initialize $hHeaderBitmap to prevent redundant changing of the bitmap if
1253 ; the user clicks the back button
1254 StrCpy $hHeaderBitmap ""
1255 FunctionEnd
1256
1257 Function .onGUIEnd
1258 ${OnEndCommon}
1259 FunctionEnd

mercurial