diff options
Diffstat (limited to 'application/basilisk/installer/windows/nsis')
7 files changed, 0 insertions, 6008 deletions
diff --git a/application/basilisk/installer/windows/nsis/defines.nsi.in b/application/basilisk/installer/windows/nsis/defines.nsi.in deleted file mode 100644 index 5e9f0ae27..000000000 --- a/application/basilisk/installer/windows/nsis/defines.nsi.in +++ /dev/null @@ -1,110 +0,0 @@ -#filter substitution -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -# Defining FunnelcakeVersion will append the value of StubURLVersionAppend to -# StubURLVersion, append the value of URLManualDownloadAppend to -# URLManualDownload, and append the value of URLStubDownloadAppend to -# URLStubDownload. The value of FunnelcakeVersion should not be defined when it -# is not used and when it is defined its value should never be empty. -# !define FunnelcakeVersion "999" - -!ifdef FunnelcakeVersion -!define URLManualDownloadAppend "&f=${FunnelcakeVersion}" -!define URLStubDownloadAppend "-f${FunnelcakeVersion}" -!define StubURLVersionAppend "-${FunnelcakeVersion}" -!else -!define URLManualDownloadAppend "" -!define URLStubDownloadAppend "" -!define StubURLVersionAppend "" -!endif - -# These defines should match application.ini settings -!define AppName "Basilisk" -!define AppVersion "@APP_VERSION@" -!define GREVersion @MOZILLA_VERSION@ -!define AB_CD "@AB_CD@" - -!define FileMainEXE "@MOZ_APP_NAME@.exe" -!define WindowClass "BasiliskMessageWindow" -!define DDEApplication "Basilisk" -!define AppRegName "Basilisk" - -!ifndef DEV_EDITION -!define BrandShortName "@MOZ_APP_DISPLAYNAME@" -!endif -!define BrandFullName "${BrandFullNameInternal}" - -!define CERTIFICATE_NAME "Mozilla Corporation" -!define CERTIFICATE_ISSUER "DigiCert SHA2 Assured ID Code Signing CA" -; Changing the name or issuer requires us to have both the old and the new -; in the registry at the same time, temporarily. -!define CERTIFICATE_NAME_PREVIOUS "Mozilla Corporation" -!define CERTIFICATE_ISSUER_PREVIOUS "DigiCert Assured ID Code Signing CA-1" - -# LSP_CATEGORIES is the permitted LSP categories for the application. Each LSP -# category value is ANDed together to set multiple permitted categories. -# See http://msdn.microsoft.com/en-us/library/ms742253%28VS.85%29.aspx -# The value below removes all LSP categories previously set. -!define LSP_CATEGORIES "0x00000000" - -!if "@MOZ_UPDATE_CHANNEL@" == "" -!define UpdateChannel "Unknown" -!else -!define UpdateChannel "@MOZ_UPDATE_CHANNEL@" -!endif - -# Due to official and beta using the same branding this is needed to -# differentiante between the url used by the stub for downloading. -!if "@MOZ_UPDATE_CHANNEL@" == "beta" -!define BETA_UPDATE_CHANNEL -!endif - -!define BaseURLStubPing "http://download-stats.mozilla.org/stub" - -# ARCH is used when it is necessary to differentiate the x64 registry keys from -# the x86 registry keys (e.g. the uninstall registry key). -#ifdef HAVE_64BIT_BUILD -!define HAVE_64BIT_BUILD -!define ARCH "x64" -!define MinSupportedVer "Microsoft Windows 7 x64" -#else -!define MinSupportedVer "Microsoft Windows 7" -!define ARCH "x86" -#endif - -!define MinSupportedCPU "SSE2" - -#ifdef MOZ_MAINTENANCE_SERVICE -!define MOZ_MAINTENANCE_SERVICE -#endif - -# File details shared by both the installer and uninstaller -VIProductVersion "1.0.0.0" -VIAddVersionKey "ProductName" "${BrandShortName}" -VIAddVersionKey "CompanyName" "${CompanyName}" -#ifdef MOZ_OFFICIAL_BRANDING -VIAddVersionKey "LegalTrademarks" "${BrandShortName} is a Trademark of Moonchild Productions." -#endif -VIAddVersionKey "LegalCopyright" "${CompanyName}" -VIAddVersionKey "FileVersion" "${AppVersion}" -VIAddVersionKey "ProductVersion" "${AppVersion}" -# Comments is not used but left below commented out for future reference -# VIAddVersionKey "Comments" "Comments" - -# It isn't possible to get the size of the installation prior to downloading -# so the stub installer uses an estimate. The size is derived from the size of -# the complete installer, the size of the extracted complete installer, and at -# least 15 MB additional for working room. -!define APPROXIMATE_REQUIRED_SPACE_MB "145" - -# Control positions in Dialog Units so they are placed correctly with -# non-default DPI settings -!define OPTIONS_ITEM_EDGE_DU 90u -!define OPTIONS_ITEM_WIDTH_DU 356u -!define OPTIONS_SUBITEM_EDGE_DU 119u -!define OPTIONS_SUBITEM_WIDTH_DU 327u -!define INSTALL_BLURB_TOP_DU 78u -!define APPNAME_BMP_EDGE_DU 19u -!define APPNAME_BMP_TOP_DU 12u diff --git a/application/basilisk/installer/windows/nsis/installer.nsi b/application/basilisk/installer/windows/nsis/installer.nsi deleted file mode 100644 index 570403553..000000000 --- a/application/basilisk/installer/windows/nsis/installer.nsi +++ /dev/null @@ -1,1301 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -# Required Plugins: -# AppAssocReg http://nsis.sourceforge.net/Application_Association_Registration_plug-in -# ApplicationID http://nsis.sourceforge.net/ApplicationID_plug-in -# CityHash http://dxr.mozilla.org/mozilla-central/source/other-licenses/nsis/Contrib/CityHash -# ShellLink http://nsis.sourceforge.net/ShellLink_plug-in -# UAC http://nsis.sourceforge.net/UAC_plug-in -# ServicesHelper Mozilla specific plugin that is located in /other-licenses/nsis - -; Set verbosity to 3 (e.g. no script) to lessen the noise in the build logs -!verbose 3 - -; 7-Zip provides better compression than the lzma from NSIS so we add the files -; uncompressed and use 7-Zip to create a SFX archive of it -SetDatablockOptimize on -SetCompress off -CRCCheck on - -RequestExecutionLevel user - -; The commands inside this ifdef require NSIS 3.0a2 or greater so the ifdef can -; be removed after we require NSIS 3.0a2 or greater. -!ifdef NSIS_PACKEDVERSION - Unicode true - ManifestSupportedOS all - ManifestDPIAware true -!endif - -!addplugindir ./ - -Var TmpVal -Var InstallType -Var AddStartMenuSC -Var AddTaskbarSC -Var AddQuickLaunchSC -Var AddDesktopSC -Var InstallMaintenanceService -Var PageName -Var PreventRebootRequired - -; By defining NO_STARTMENU_DIR an installer that doesn't provide an option for -; an application's Start Menu PROGRAMS directory and doesn't define the -; StartMenuDir variable can use the common InstallOnInitCommon macro. -!define NO_STARTMENU_DIR - -; On Vista and above attempt to elevate Standard Users in addition to users that -; are a member of the Administrators group. -!define NONADMIN_ELEVATE - -!define AbortSurveyURL "http://www.kampyle.com/feedback_form/ff-feedback-form.php?site_code=8166124&form_id=12116&url=" - -; Other included files may depend upon these includes! -; The following includes are provided by NSIS. -!include FileFunc.nsh -!include LogicLib.nsh -!include MUI.nsh -!include WinMessages.nsh -!include WinVer.nsh -!include WordFunc.nsh - -!insertmacro GetOptions -!insertmacro GetParameters -!insertmacro GetSize -!insertmacro StrFilter -!insertmacro WordFind -!insertmacro WordReplace - -; The following includes are custom. -!include branding.nsi -!include defines.nsi -!include common.nsh -!include locales.nsi - -VIAddVersionKey "FileDescription" "${BrandShortName} Installer" -VIAddVersionKey "OriginalFilename" "setup.exe" - -; Must be inserted before other macros that use logging -!insertmacro _LoggingCommon - -!insertmacro AddDisabledDDEHandlerValues -!insertmacro ChangeMUIHeaderImage -!insertmacro CheckForFilesInUse -!insertmacro CleanUpdateDirectories -!insertmacro CopyFilesFromDir -!insertmacro CreateRegKey -!insertmacro GetLongPath -!insertmacro GetPathFromString -!insertmacro GetParent -!insertmacro InitHashAppModelId -!insertmacro IsHandlerForInstallDir -!insertmacro IsPinnedToTaskBar -!insertmacro IsUserAdmin -!insertmacro LogDesktopShortcut -!insertmacro LogQuickLaunchShortcut -!insertmacro LogStartMenuShortcut -!insertmacro ManualCloseAppPrompt -!insertmacro PinnedToStartMenuLnkCount -!insertmacro RegCleanAppHandler -!insertmacro RegCleanMain -!insertmacro RegCleanUninstall -!insertmacro RemovePrecompleteEntries -!insertmacro SetAppLSPCategories -!insertmacro SetBrandNameVars -!insertmacro UpdateShortcutAppModelIDs -!insertmacro UnloadUAC -!insertmacro WriteRegStr2 -!insertmacro WriteRegDWORD2 - -!include shared.nsh - -; Helper macros for ui callbacks. Insert these after shared.nsh -!insertmacro CheckCustomCommon -!insertmacro InstallEndCleanupCommon -!insertmacro InstallOnInitCommon -!insertmacro InstallStartCleanupCommon -!insertmacro LeaveDirectoryCommon -!insertmacro LeaveOptionsCommon -!insertmacro OnEndCommon -!insertmacro PreDirectoryCommon - -Name "${BrandFullName}" -OutFile "setup.exe" -!ifdef HAVE_64BIT_BUILD - InstallDir "$PROGRAMFILES64\${BrandFullName}\" -!else - InstallDir "$PROGRAMFILES32\${BrandFullName}\" -!endif -ShowInstDetails nevershow - -################################################################################ -# Modern User Interface - MUI - -!define MOZ_MUI_CUSTOM_ABORT -!define MUI_CUSTOMFUNCTION_ABORT "CustomAbort" -!define MUI_ICON setup.ico -!define MUI_UNICON setup.ico -!define MUI_WELCOMEPAGE_TITLE_3LINES -!define MUI_HEADERIMAGE -!define MUI_HEADERIMAGE_RIGHT -!define MUI_WELCOMEFINISHPAGE_BITMAP wizWatermark.bmp - -; Use a right to left header image when the language is right to left -!ifdef ${AB_CD}_rtl -!define MUI_HEADERIMAGE_BITMAP_RTL wizHeaderRTL.bmp -!else -!define MUI_HEADERIMAGE_BITMAP wizHeader.bmp -!endif - -/** - * Installation Pages - */ -; Welcome Page -!define MUI_PAGE_CUSTOMFUNCTION_PRE preWelcome -!insertmacro MUI_PAGE_WELCOME - -; Custom Options Page -Page custom preOptions leaveOptions - -; Select Install Directory Page -!define MUI_PAGE_CUSTOMFUNCTION_PRE preDirectory -!define MUI_PAGE_CUSTOMFUNCTION_LEAVE leaveDirectory -!define MUI_DIRECTORYPAGE_VERIFYONLEAVE -!insertmacro MUI_PAGE_DIRECTORY - -; Custom Components Page -!ifdef MOZ_MAINTENANCE_SERVICE -Page custom preComponents leaveComponents -!endif - -; Custom Shortcuts Page -Page custom preShortcuts leaveShortcuts - -; Custom Summary Page -Page custom preSummary leaveSummary - -; Install Files Page -!insertmacro MUI_PAGE_INSTFILES - -; Finish Page -!define MUI_FINISHPAGE_TITLE_3LINES -!define MUI_FINISHPAGE_RUN -!define MUI_FINISHPAGE_RUN_FUNCTION LaunchApp -!define MUI_FINISHPAGE_RUN_TEXT $(LAUNCH_TEXT) -!define MUI_PAGE_CUSTOMFUNCTION_PRE preFinish -!insertmacro MUI_PAGE_FINISH - -; Use the default dialog for IDD_VERIFY for a simple Banner -ChangeUI IDD_VERIFY "${NSISDIR}\Contrib\UIs\default.exe" - -################################################################################ -# Install Sections - -; Cleanup operations to perform at the start of the installation. -Section "-InstallStartCleanup" - SetDetailsPrint both - DetailPrint $(STATUS_CLEANUP) - SetDetailsPrint none - - SetOutPath "$INSTDIR" - ${StartInstallLog} "${BrandFullName}" "${AB_CD}" "${AppVersion}" "${GREVersion}" - - StrCpy $R9 "true" - StrCpy $PreventRebootRequired "false" - ${GetParameters} $R8 - ${GetOptions} "$R8" "/INI=" $R7 - ${Unless} ${Errors} - ; The configuration file must also exist - ${If} ${FileExists} "$R7" - ReadINIStr $R9 $R7 "Install" "RemoveDistributionDir" - ReadINIStr $R8 $R7 "Install" "PreventRebootRequired" - ${If} $R8 == "true" - StrCpy $PreventRebootRequired "true" - ${EndIf} - ${EndIf} - ${EndUnless} - - ; Remove directories and files we always control before parsing the uninstall - ; log so empty directories can be removed. - ${If} ${FileExists} "$INSTDIR\updates" - RmDir /r "$INSTDIR\updates" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\updated" - RmDir /r "$INSTDIR\updated" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\defaults\shortcuts" - RmDir /r "$INSTDIR\defaults\shortcuts" - ${EndIf} - ; Only remove the distribution directory if it exists and if the installer - ; isn't launched with an ini file that has RemoveDistributionDir=false in the - ; install section. - ${If} ${FileExists} "$INSTDIR\distribution" - ${AndIf} $R9 != "false" - RmDir /r "$INSTDIR\distribution" - ${EndIf} - - ; Delete the app exe if present to prevent launching the app while we are - ; installing. - ClearErrors - ${DeleteFile} "$INSTDIR\${FileMainEXE}" - ${If} ${Errors} - ; If the user closed the application it can take several seconds for it to - ; shut down completely. If the application is being used by another user we - ; can rename the file and then delete is when the system is restarted. - Sleep 5000 - ${DeleteFile} "$INSTDIR\${FileMainEXE}" - ClearErrors - ${EndIf} - - ; setup the application model id registration value - ${InitHashAppModelId} "$INSTDIR" "Software\Mozilla\${AppName}\TaskBarIDs" - - ; Remove the updates directory for Vista and above - ${CleanUpdateDirectories} "Mozilla\Basilisk" "Mozilla\updates" - - ${RemoveDeprecatedFiles} - ${RemovePrecompleteEntries} "false" - - ${If} ${FileExists} "$INSTDIR\defaults\pref\channel-prefs.js" - Delete "$INSTDIR\defaults\pref\channel-prefs.js" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\defaults\pref" - RmDir "$INSTDIR\defaults\pref" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\defaults" - RmDir "$INSTDIR\defaults" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\uninstall" - ; Remove the uninstall directory that we control - RmDir /r "$INSTDIR\uninstall" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\update-settings.ini" - Delete "$INSTDIR\update-settings.ini" - ${EndIf} - - ; Explictly remove empty webapprt dir in case it exists (bug 757978). - RmDir "$INSTDIR\webapprt\components" - RmDir "$INSTDIR\webapprt" - - ${InstallStartCleanupCommon} -SectionEnd - -Section "-Application" APP_IDX - ${StartUninstallLog} - - SetDetailsPrint both - DetailPrint $(STATUS_INSTALL_APP) - SetDetailsPrint none - - ${LogHeader} "Installing Main Files" - ${CopyFilesFromDir} "$EXEDIR\core" "$INSTDIR" \ - "$(ERROR_CREATE_DIRECTORY_PREFIX)" \ - "$(ERROR_CREATE_DIRECTORY_SUFFIX)" - - ; Register DLLs - ; XXXrstrong - AccessibleMarshal.dll can be used by multiple applications but - ; is only registered for the last application installed. When the last - ; application installed is uninstalled AccessibleMarshal.dll will no longer be - ; registered. bug 338878 - ${LogHeader} "DLL Registration" - ClearErrors - ${RegisterDLL} "$INSTDIR\AccessibleMarshal.dll" - ${If} ${Errors} - ${LogMsg} "** ERROR Registering: $INSTDIR\AccessibleMarshal.dll **" - ${Else} - ${LogUninstall} "DLLReg: \AccessibleMarshal.dll" - ${LogMsg} "Registered: $INSTDIR\AccessibleMarshal.dll" - ${EndIf} - - ClearErrors - - ; Default for creating Start Menu shortcut - ; (1 = create, 0 = don't create) - ${If} $AddStartMenuSC == "" - StrCpy $AddStartMenuSC "1" - ${EndIf} - - ; Default for creating Quick Launch shortcut (1 = create, 0 = don't create) - ${If} $AddQuickLaunchSC == "" - ; Don't install the quick launch shortcut on Windows 7 - ${If} ${AtLeastWin7} - StrCpy $AddQuickLaunchSC "0" - ${Else} - StrCpy $AddQuickLaunchSC "1" - ${EndIf} - ${EndIf} - - ; Default for creating Desktop shortcut (1 = create, 0 = don't create) - ${If} $AddDesktopSC == "" - StrCpy $AddDesktopSC "1" - ${EndIf} - - ${LogHeader} "Adding Registry Entries" - SetShellVarContext current ; Set SHCTX to HKCU - ${RegCleanMain} "Software\Mozilla" - ${RegCleanUninstall} - ${UpdateProtocolHandlers} - - ClearErrors - WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test" - ${If} ${Errors} - StrCpy $TmpVal "HKCU" ; used primarily for logging - ${Else} - SetShellVarContext all ; Set SHCTX to HKLM - DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" - StrCpy $TmpVal "HKLM" ; used primarily for logging - ${RegCleanMain} "Software\Mozilla" - ${RegCleanUninstall} - ${UpdateProtocolHandlers} - - ReadRegStr $0 HKLM "Software\mozilla.org\Mozilla" "CurrentVersion" - ${If} "$0" != "${GREVersion}" - WriteRegStr HKLM "Software\mozilla.org\Mozilla" "CurrentVersion" "${GREVersion}" - ${EndIf} - ${EndIf} - - ${RemoveDeprecatedKeys} - - ; The previous installer adds several regsitry values to both HKLM and HKCU. - ; We now try to add to HKLM and if that fails to HKCU - - ; The order that reg keys and values are added is important if you use the - ; uninstall log to remove them on uninstall. When using the uninstall log you - ; MUST add children first so they will be removed first on uninstall so they - ; will be empty when the key is deleted. This allows the uninstaller to - ; specify that only empty keys will be deleted. - ${SetAppKeys} - - ${FixClassKeys} - - ; Uninstall keys can only exist under HKLM on some versions of windows. Since - ; it doesn't cause problems always add them. - ${SetUninstallKeys} - - ; On install always add the BasiliskHTML and BasiliskURL keys. - ; An empty string is used for the 5th param because BasiliskHTML is not a - ; protocol handler. - ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8 - StrCpy $2 "$\"$8$\" -osint -url $\"%1$\"" - - ; In Win8, the delegate execute handler picks up the value in BasiliskURL and - ; BasiliskHTML to launch the desktop browser when it needs to. - ${AddDisabledDDEHandlerValues} "BasiliskHTML" "$2" "$8,1" \ - "${AppRegName} Document" "" - ${AddDisabledDDEHandlerValues} "BasiliskURL" "$2" "$8,1" "${AppRegName} URL" \ - "true" - - ; For pre win8, the following keys should only be set if we can write to HKLM. - ; For post win8, the keys below get set in both HKLM and HKCU. - ${If} $TmpVal == "HKLM" - ; Set the Start Menu Internet and Vista Registered App HKLM registry keys. - ${SetStartMenuInternet} "HKLM" - ${FixShellIconHandler} "HKLM" - - ; If we are writing to HKLM and create either the desktop or start menu - ; shortcuts set IconsVisible to 1 otherwise to 0. - ; Taskbar shortcuts imply having a start menu shortcut. - ${StrFilter} "${FileMainEXE}" "+" "" "" $R9 - StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo" - ${If} $AddDesktopSC == 1 - ${OrIf} $AddStartMenuSC == 1 - ${OrIf} $AddTaskbarSC == 1 - WriteRegDWORD HKLM "$0" "IconsVisible" 1 - ${Else} - WriteRegDWORD HKLM "$0" "IconsVisible" 0 - ${EndIf} - ${EndIf} - - ${If} ${AtLeastWin8} - ; Set the Start Menu Internet and Vista Registered App HKCU registry keys. - ${SetStartMenuInternet} "HKCU" - ${FixShellIconHandler} "HKCU" - - ; If we create either the desktop or start menu shortcuts, then - ; set IconsVisible to 1 otherwise to 0. - ; Taskbar shortcuts imply having a start menu shortcut. - ${StrFilter} "${FileMainEXE}" "+" "" "" $R9 - StrCpy $0 "Software\Clients\StartMenuInternet\$R9\InstallInfo" - ${If} $AddDesktopSC == 1 - ${OrIf} $AddStartMenuSC == 1 - ${OrIf} $AddTaskbarSC == 1 - WriteRegDWORD HKCU "$0" "IconsVisible" 1 - ${Else} - WriteRegDWORD HKCU "$0" "IconsVisible" 0 - ${EndIf} - ${EndIf} - -!ifdef MOZ_MAINTENANCE_SERVICE - ; If the maintenance service page was displayed then a value was already - ; explicitly selected for installing the maintenance service and - ; and so InstallMaintenanceService will already be 0 or 1. - ; If the maintenance service page was not displayed then - ; InstallMaintenanceService will be equal to "". - ${If} $InstallMaintenanceService == "" - Call IsUserAdmin - Pop $R0 - ${If} $R0 == "true" - ; Only proceed if we have HKLM write access - ${AndIf} $TmpVal == "HKLM" - ; On Windows < XP SP3 we do not install the maintenance service. - ${If} ${IsWinXP} - ${AndIf} ${AtMostServicePack} 2 - StrCpy $InstallMaintenanceService "0" - ${Else} - ; The user is an admin, so we should default to installing the service. - StrCpy $InstallMaintenanceService "1" - ${EndIf} - ${Else} - ; The user is not admin, so we can't install the service. - StrCpy $InstallMaintenanceService "0" - ${EndIf} - ${EndIf} - - ${If} $InstallMaintenanceService == "1" - ; The user wants to install the maintenance service, so execute - ; the pre-packaged maintenance service installer. - ; This option can only be turned on if the user is an admin so there - ; is no need to use ExecShell w/ verb runas to enforce elevated. - nsExec::Exec "$\"$INSTDIR\maintenanceservice_installer.exe$\"" - ${EndIf} -!endif - - ; These need special handling on uninstall since they may be overwritten by - ; an install into a different location. - StrCpy $0 "Software\Microsoft\Windows\CurrentVersion\App Paths\${FileMainEXE}" - ${WriteRegStr2} $TmpVal "$0" "" "$INSTDIR\${FileMainEXE}" 0 - ${WriteRegStr2} $TmpVal "$0" "Path" "$INSTDIR" 0 - - StrCpy $0 "Software\Microsoft\MediaPlayer\ShimInclusionList\$R9" - ${CreateRegKey} "$TmpVal" "$0" 0 - StrCpy $0 "Software\Microsoft\MediaPlayer\ShimInclusionList\plugin-container.exe" - ${CreateRegKey} "$TmpVal" "$0" 0 - - ${If} $TmpVal == "HKLM" - ; Set the permitted LSP Categories for WinVista and above - ${SetAppLSPCategories} ${LSP_CATEGORIES} - ${EndIf} - - ; Create shortcuts - ${LogHeader} "Adding Shortcuts" - - ; Remove the start menu shortcuts and directory if the SMPROGRAMS section - ; exists in the shortcuts_log.ini and the SMPROGRAMS. The installer's shortcut - ; creation code will create the shortcut in the root of the Start Menu - ; Programs directory. - ${RemoveStartMenuDir} - - ; Always add the application's shortcuts to the shortcuts log ini file. The - ; DeleteShortcuts macro will do the right thing on uninstall if the - ; shortcuts don't exist. - ${LogStartMenuShortcut} "${BrandFullName}.lnk" - ${LogQuickLaunchShortcut} "${BrandFullName}.lnk" - ${LogDesktopShortcut} "${BrandFullName}.lnk" - - ; Best effort to update the Win7 taskbar and start menu shortcut app model - ; id's. The possible contexts are current user / system and the user that - ; elevated the installer. - Call FixShortcutAppModelIDs - ; If the current context is all also perform Win7 taskbar and start menu link - ; maintenance for the current user context. - ${If} $TmpVal == "HKLM" - SetShellVarContext current ; Set SHCTX to HKCU - Call FixShortcutAppModelIDs - SetShellVarContext all ; Set SHCTX to HKLM - ${EndIf} - - ; If running elevated also perform Win7 taskbar and start menu link - ; maintenance for the unelevated user context in case that is different than - ; the current user. - ClearErrors - ${GetParameters} $0 - ${GetOptions} "$0" "/UAC:" $0 - ${Unless} ${Errors} - GetFunctionAddress $0 FixShortcutAppModelIDs - UAC::ExecCodeSegment $0 - ${EndUnless} - - ; UAC only allows elevating to an Admin account so there is no need to add - ; the Start Menu or Desktop shortcuts from the original unelevated process - ; since this will either add it for the user if unelevated or All Users if - ; elevated. - ${If} $AddStartMenuSC == 1 - CreateShortCut "$SMPROGRAMS\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" - ${If} ${FileExists} "$SMPROGRAMS\${BrandFullName}.lnk" - ShellLink::SetShortCutWorkingDirectory "$SMPROGRAMS\${BrandFullName}.lnk" \ - "$INSTDIR" - ${If} ${AtLeastWin7} - ${AndIf} "$AppUserModelID" != "" - ApplicationID::Set "$SMPROGRAMS\${BrandFullName}.lnk" "$AppUserModelID" "true" - ${EndIf} - ${LogMsg} "Added Shortcut: $SMPROGRAMS\${BrandFullName}.lnk" - ${Else} - ${LogMsg} "** ERROR Adding Shortcut: $SMPROGRAMS\${BrandFullName}.lnk" - ${EndIf} - ${EndIf} - - ; Update lastwritetime of the Start Menu shortcut to clear the tile cache. - ${If} ${AtLeastWin8} - ${AndIf} ${FileExists} "$SMPROGRAMS\${BrandFullName}.lnk" - FileOpen $0 "$SMPROGRAMS\${BrandFullName}.lnk" a - FileClose $0 - ${EndIf} - - ${If} $AddDesktopSC == 1 - CreateShortCut "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" - ${If} ${FileExists} "$DESKTOP\${BrandFullName}.lnk" - ShellLink::SetShortCutWorkingDirectory "$DESKTOP\${BrandFullName}.lnk" \ - "$INSTDIR" - ${If} ${AtLeastWin7} - ${AndIf} "$AppUserModelID" != "" - ApplicationID::Set "$DESKTOP\${BrandFullName}.lnk" "$AppUserModelID" "true" - ${EndIf} - ${LogMsg} "Added Shortcut: $DESKTOP\${BrandFullName}.lnk" - ${Else} - ${LogMsg} "** ERROR Adding Shortcut: $DESKTOP\${BrandFullName}.lnk" - ${EndIf} - ${EndIf} - - ; If elevated the Quick Launch shortcut must be added from the unelevated - ; original process. - ${If} $AddQuickLaunchSC == 1 - ${Unless} ${AtLeastWin7} - ClearErrors - ${GetParameters} $0 - ${GetOptions} "$0" "/UAC:" $0 - ${If} ${Errors} - Call AddQuickLaunchShortcut - ${LogMsg} "Added Shortcut: $QUICKLAUNCH\${BrandFullName}.lnk" - ${Else} - ; It is not possible to add a log entry from the unelevated process so - ; add the log entry without the path since there is no simple way to - ; know the correct full path. - ${LogMsg} "Added Quick Launch Shortcut: ${BrandFullName}.lnk" - GetFunctionAddress $0 AddQuickLaunchShortcut - UAC::ExecCodeSegment $0 - ${EndIf} - ${EndUnless} - ${EndIf} - -!ifdef MOZ_MAINTENANCE_SERVICE - ${If} $TmpVal == "HKLM" - ; Add the registry keys for allowed certificates. - ${AddMaintCertKeys} - ${EndIf} -!endif -SectionEnd - -; Cleanup operations to perform at the end of the installation. -Section "-InstallEndCleanup" - SetDetailsPrint both - DetailPrint "$(STATUS_CLEANUP)" - SetDetailsPrint none - - ${Unless} ${Silent} - ClearErrors - ${MUI_INSTALLOPTIONS_READ} $0 "summary.ini" "Field 4" "State" - ${If} "$0" == "1" - ; NB: this code is duplicated in stub.nsi. Please keep in sync. - ; For data migration in the app, we want to know what the default browser - ; value was before we changed it. To do so, we read it here and store it - ; in our own registry key. - StrCpy $0 "" - ${If} ${AtLeastWinVista} - AppAssocReg::QueryCurrentDefault "http" "protocol" "effective" - Pop $1 - ; If the method hasn't failed, $1 will contain the progid. Check: - ${If} "$1" != "method failed" - ${AndIf} "$1" != "method not available" - ; Read the actual command from the progid - ReadRegStr $0 HKCR "$1\shell\open\command" "" - ${EndIf} - ${EndIf} - ; If using the App Association Registry didn't happen or failed, fall back - ; to the effective http default: - ${If} "$0" == "" - ReadRegStr $0 HKCR "http\shell\open\command" "" - ${EndIf} - ; If we have something other than empty string now, write the value. - ${If} "$0" != "" - ClearErrors - WriteRegStr HKCU "Software\Mozilla\Basilisk" "OldDefaultBrowserCommand" "$0" - ${EndIf} - - ${LogHeader} "Setting as the default browser" - ClearErrors - ${GetParameters} $0 - ${GetOptions} "$0" "/UAC:" $0 - ${If} ${Errors} - Call SetAsDefaultAppUserHKCU - ${Else} - GetFunctionAddress $0 SetAsDefaultAppUserHKCU - UAC::ExecCodeSegment $0 - ${EndIf} - ${ElseIfNot} ${Errors} - ${LogHeader} "Writing default-browser opt-out" - ClearErrors - WriteRegStr HKCU "Software\Mozilla\Basilisk" "DefaultBrowserOptOut" "True" - ${If} ${Errors} - ${LogMsg} "Error writing default-browser opt-out" - ${EndIf} - ${EndIf} - ${EndUnless} - - ; Adds a pinned Task Bar shortcut (see MigrateTaskBarShortcut for details). - ${MigrateTaskBarShortcut} - - ; Add the Firewall entries during install - Call AddFirewallEntries - - ; Refresh desktop icons - System::Call "shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i ${SHCNF_DWORDFLUSH}, i 0, i 0)" - - ${InstallEndCleanupCommon} - - ${If} $PreventRebootRequired == "true" - SetRebootFlag false - ${EndIf} - - ${If} ${RebootFlag} - ; Admin is required to delete files on reboot so only add the moz-delete if - ; the user is an admin. After calling UAC::IsAdmin $0 will equal 1 if the - ; user is an admin. - UAC::IsAdmin - ${If} "$0" == "1" - ; When a reboot is required give SHChangeNotify time to finish the - ; refreshing the icons so the OS doesn't display the icons from helper.exe - Sleep 10000 - ${LogHeader} "Reboot Required To Finish Installation" - ; ${FileMainEXE}.moz-upgrade should never exist but just in case... - ${Unless} ${FileExists} "$INSTDIR\${FileMainEXE}.moz-upgrade" - Rename "$INSTDIR\${FileMainEXE}" "$INSTDIR\${FileMainEXE}.moz-upgrade" - ${EndUnless} - - ${If} ${FileExists} "$INSTDIR\${FileMainEXE}" - ClearErrors - Rename "$INSTDIR\${FileMainEXE}" "$INSTDIR\${FileMainEXE}.moz-delete" - ${Unless} ${Errors} - Delete /REBOOTOK "$INSTDIR\${FileMainEXE}.moz-delete" - ${EndUnless} - ${EndIf} - - ${Unless} ${FileExists} "$INSTDIR\${FileMainEXE}" - CopyFiles /SILENT "$INSTDIR\uninstall\helper.exe" "$INSTDIR" - FileOpen $0 "$INSTDIR\${FileMainEXE}" w - FileWrite $0 "Will be deleted on restart" - Rename /REBOOTOK "$INSTDIR\${FileMainEXE}.moz-upgrade" "$INSTDIR\${FileMainEXE}" - FileClose $0 - Delete "$INSTDIR\${FileMainEXE}" - Rename "$INSTDIR\helper.exe" "$INSTDIR\${FileMainEXE}" - ${EndUnless} - ${EndIf} - ${EndIf} -SectionEnd - -################################################################################ -# Install Abort Survey Functions - -Function CustomAbort - ${If} "${AB_CD}" == "en-US" - ${AndIf} "$PageName" != "" - ${AndIf} ${FileExists} "$EXEDIR\core\distribution\distribution.ini" - ReadINIStr $0 "$EXEDIR\core\distribution\distribution.ini" "Global" "about" - ClearErrors - ${WordFind} "$0" "Funnelcake" "E#" $1 - ${Unless} ${Errors} - ; Yes = fill out the survey and exit, No = don't fill out survey and exit, - ; Cancel = don't exit. - MessageBox MB_YESNO|MB_ICONEXCLAMATION \ - "Would you like to tell us why you are canceling this installation?" \ - IDYes +1 IDNO CustomAbort_finish - ${If} "$PageName" == "Welcome" - GetFunctionAddress $0 AbortSurveyWelcome - ${ElseIf} "$PageName" == "Options" - GetFunctionAddress $0 AbortSurveyOptions - ${ElseIf} "$PageName" == "Directory" - GetFunctionAddress $0 AbortSurveyDirectory - ${ElseIf} "$PageName" == "Shortcuts" - GetFunctionAddress $0 AbortSurveyShortcuts - ${ElseIf} "$PageName" == "Summary" - GetFunctionAddress $0 AbortSurveySummary - ${EndIf} - ClearErrors - ${GetParameters} $1 - ${GetOptions} "$1" "/UAC:" $2 - ${If} ${Errors} - Call $0 - ${Else} - UAC::ExecCodeSegment $0 - ${EndIf} - - CustomAbort_finish: - Return - ${EndUnless} - ${EndIf} - - MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(MOZ_MUI_TEXT_ABORTWARNING)" \ - IDYES +1 IDNO +2 - Return - Abort -FunctionEnd - -Function AbortSurveyWelcome - ExecShell "open" "${AbortSurveyURL}step1" -FunctionEnd - -Function AbortSurveyOptions - ExecShell "open" "${AbortSurveyURL}step2" -FunctionEnd - -Function AbortSurveyDirectory - ExecShell "open" "${AbortSurveyURL}step3" -FunctionEnd - -Function AbortSurveyShortcuts - ExecShell "open" "${AbortSurveyURL}step4" -FunctionEnd - -Function AbortSurveySummary - ExecShell "open" "${AbortSurveyURL}step5" -FunctionEnd - -################################################################################ -# Helper Functions - -Function AddQuickLaunchShortcut - CreateShortCut "$QUICKLAUNCH\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" - ${If} ${FileExists} "$QUICKLAUNCH\${BrandFullName}.lnk" - ShellLink::SetShortCutWorkingDirectory "$QUICKLAUNCH\${BrandFullName}.lnk" \ - "$INSTDIR" - ${EndIf} -FunctionEnd - -Function CheckExistingInstall - ; If there is a pending file copy from a previous upgrade don't allow - ; installing until after the system has rebooted. - IfFileExists "$INSTDIR\${FileMainEXE}.moz-upgrade" +1 +4 - MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(WARN_RESTART_REQUIRED_UPGRADE)" IDNO +2 - Reboot - Quit - - ; If there is a pending file deletion from a previous uninstall don't allow - ; installing until after the system has rebooted. - IfFileExists "$INSTDIR\${FileMainEXE}.moz-delete" +1 +4 - MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(WARN_RESTART_REQUIRED_UNINSTALL)" IDNO +2 - Reboot - Quit - - ${If} ${FileExists} "$INSTDIR\${FileMainEXE}" - ; Disable the next, cancel, and back buttons - GetDlgItem $0 $HWNDPARENT 1 ; Next button - EnableWindow $0 0 - GetDlgItem $0 $HWNDPARENT 2 ; Cancel button - EnableWindow $0 0 - GetDlgItem $0 $HWNDPARENT 3 ; Back button - EnableWindow $0 0 - - Banner::show /NOUNLOAD "$(BANNER_CHECK_EXISTING)" - - ${If} "$TmpVal" == "FoundMessageWindow" - Sleep 5000 - ${EndIf} - - ${PushFilesToCheck} - - ; Store the return value in $TmpVal so it is less likely to be accidentally - ; overwritten elsewhere. - ${CheckForFilesInUse} $TmpVal - - Banner::destroy - - ; Enable the next, cancel, and back buttons - GetDlgItem $0 $HWNDPARENT 1 ; Next button - EnableWindow $0 1 - GetDlgItem $0 $HWNDPARENT 2 ; Cancel button - EnableWindow $0 1 - GetDlgItem $0 $HWNDPARENT 3 ; Back button - EnableWindow $0 1 - - ${If} "$TmpVal" == "true" - StrCpy $TmpVal "FoundMessageWindow" - ${ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_INSTALL)" - StrCpy $TmpVal "true" - ${EndIf} - ${EndIf} -FunctionEnd - -Function LaunchApp -!ifndef DEV_EDITION - ${ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_LAUNCH)" -!endif - - ClearErrors - ${GetParameters} $0 - ${GetOptions} "$0" "/UAC:" $1 - ${If} ${Errors} - Exec "$\"$INSTDIR\${FileMainEXE}$\"" - ${Else} - GetFunctionAddress $0 LaunchAppFromElevatedProcess - UAC::ExecCodeSegment $0 - ${EndIf} -FunctionEnd - -Function LaunchAppFromElevatedProcess - ; Find the installation directory when launching using GetFunctionAddress - ; from an elevated installer since $INSTDIR will not be set in this installer - ${StrFilter} "${FileMainEXE}" "+" "" "" $R9 - ReadRegStr $0 HKLM "Software\Clients\StartMenuInternet\$R9\DefaultIcon" "" - ${GetPathFromString} "$0" $0 - ${GetParent} "$0" $1 - ; Set our current working directory to the application's install directory - ; otherwise the 7-Zip temp directory will be in use and won't be deleted. - SetOutPath "$1" - Exec "$\"$0$\"" -FunctionEnd - -################################################################################ -# Language - -!insertmacro MOZ_MUI_LANGUAGE 'baseLocale' -!verbose push -!verbose 3 -!include "overrideLocale.nsh" -!include "customLocale.nsh" -!verbose pop - -; Set this after the locale files to override it if it is in the locale -; using " " for BrandingText will hide the "Nullsoft Install System..." branding -BrandingText " " - -################################################################################ -# Page pre, show, and leave functions - -Function preWelcome - StrCpy $PageName "Welcome" - ${If} ${FileExists} "$EXEDIR\core\distribution\modern-wizard.bmp" - Delete "$PLUGINSDIR\modern-wizard.bmp" - CopyFiles /SILENT "$EXEDIR\core\distribution\modern-wizard.bmp" "$PLUGINSDIR\modern-wizard.bmp" - ${EndIf} -FunctionEnd - -Function preOptions - StrCpy $PageName "Options" - ${If} ${FileExists} "$EXEDIR\core\distribution\modern-header.bmp" - ${AndIf} $hHeaderBitmap == "" - Delete "$PLUGINSDIR\modern-header.bmp" - CopyFiles /SILENT "$EXEDIR\core\distribution\modern-header.bmp" "$PLUGINSDIR\modern-header.bmp" - ${ChangeMUIHeaderImage} "$PLUGINSDIR\modern-header.bmp" - ${EndIf} - !insertmacro MUI_HEADER_TEXT "$(OPTIONS_PAGE_TITLE)" "$(OPTIONS_PAGE_SUBTITLE)" - !insertmacro MUI_INSTALLOPTIONS_DISPLAY "options.ini" -FunctionEnd - -Function leaveOptions - ${MUI_INSTALLOPTIONS_READ} $0 "options.ini" "Settings" "State" - ${If} $0 != 0 - Abort - ${EndIf} - ${MUI_INSTALLOPTIONS_READ} $R0 "options.ini" "Field 2" "State" - StrCmp $R0 "1" +1 +2 - StrCpy $InstallType ${INSTALLTYPE_BASIC} - ${MUI_INSTALLOPTIONS_READ} $R0 "options.ini" "Field 3" "State" - StrCmp $R0 "1" +1 +2 - StrCpy $InstallType ${INSTALLTYPE_CUSTOM} - - ${LeaveOptionsCommon} - - ${If} $InstallType == ${INSTALLTYPE_BASIC} - Call CheckExistingInstall - ${EndIf} -FunctionEnd - -Function preDirectory - StrCpy $PageName "Directory" - ${PreDirectoryCommon} -FunctionEnd - -Function leaveDirectory - ${If} $InstallType == ${INSTALLTYPE_BASIC} - Call CheckExistingInstall - ${EndIf} - ${LeaveDirectoryCommon} "$(WARN_DISK_SPACE)" "$(WARN_WRITE_ACCESS)" -FunctionEnd - -Function preShortcuts - StrCpy $PageName "Shortcuts" - ${CheckCustomCommon} - !insertmacro MUI_HEADER_TEXT "$(SHORTCUTS_PAGE_TITLE)" "$(SHORTCUTS_PAGE_SUBTITLE)" - !insertmacro MUI_INSTALLOPTIONS_DISPLAY "shortcuts.ini" -FunctionEnd - -Function leaveShortcuts - ${MUI_INSTALLOPTIONS_READ} $0 "shortcuts.ini" "Settings" "State" - ${If} $0 != 0 - Abort - ${EndIf} - ${MUI_INSTALLOPTIONS_READ} $AddDesktopSC "shortcuts.ini" "Field 2" "State" - ${MUI_INSTALLOPTIONS_READ} $AddStartMenuSC "shortcuts.ini" "Field 3" "State" - - ; Don't install the quick launch shortcut on Windows 7 - ${Unless} ${AtLeastWin7} - ${MUI_INSTALLOPTIONS_READ} $AddQuickLaunchSC "shortcuts.ini" "Field 4" "State" - ${EndUnless} - - ${If} $InstallType == ${INSTALLTYPE_CUSTOM} - Call CheckExistingInstall - ${EndIf} -FunctionEnd - -!ifdef MOZ_MAINTENANCE_SERVICE -Function preComponents - ; If the service already exists, don't show this page - ServicesHelper::IsInstalled "MozillaMaintenance" - Pop $R9 - ${If} $R9 == 1 - ; The service already exists so don't show this page. - Abort - ${EndIf} - - ; On Windows < XP SP3 we do not install the maintenance service. - ${If} ${IsWinXP} - ${AndIf} ${AtMostServicePack} 2 - Abort - ${EndIf} - - ; Don't show the custom components page if the - ; user is not an admin - Call IsUserAdmin - Pop $R9 - ${If} $R9 != "true" - Abort - ${EndIf} - - ; Only show the maintenance service page if we have write access to HKLM - ClearErrors - WriteRegStr HKLM "Software\Mozilla" \ - "${BrandShortName}InstallerTest" "Write Test" - ${If} ${Errors} - ClearErrors - Abort - ${Else} - DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" - ${EndIf} - - StrCpy $PageName "Components" - ${CheckCustomCommon} - !insertmacro MUI_HEADER_TEXT "$(COMPONENTS_PAGE_TITLE)" "$(COMPONENTS_PAGE_SUBTITLE)" - !insertmacro MUI_INSTALLOPTIONS_DISPLAY "components.ini" -FunctionEnd - -Function leaveComponents - ${MUI_INSTALLOPTIONS_READ} $0 "components.ini" "Settings" "State" - ${If} $0 != 0 - Abort - ${EndIf} - ${MUI_INSTALLOPTIONS_READ} $InstallMaintenanceService "components.ini" "Field 2" "State" - ${If} $InstallType == ${INSTALLTYPE_CUSTOM} - Call CheckExistingInstall - ${EndIf} -FunctionEnd -!endif - -Function preSummary - StrCpy $PageName "Summary" - ; Setup the summary.ini file for the Custom Summary Page - WriteINIStr "$PLUGINSDIR\summary.ini" "Settings" NumFields "3" - - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Type "label" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Text "$(SUMMARY_INSTALLED_TO)" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Left "0" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Right "-1" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Top "5" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 1" Bottom "15" - - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Type "text" - ; The contents of this control must be set as follows in the pre function - ; ${MUI_INSTALLOPTIONS_READ} $1 "summary.ini" "Field 2" "HWND" - ; SendMessage $1 ${WM_SETTEXT} 0 "STR:$INSTDIR" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" state "" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Left "0" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Right "-1" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Top "17" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" Bottom "30" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 2" flags "READONLY" - - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Type "label" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Left "0" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Right "-1" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Top "130" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Bottom "150" - - ${If} ${FileExists} "$INSTDIR\${FileMainEXE}" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Text "$(SUMMARY_UPGRADE_CLICK)" - WriteINIStr "$PLUGINSDIR\summary.ini" "Settings" NextButtonText "$(UPGRADE_BUTTON)" - ${Else} - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 3" Text "$(SUMMARY_INSTALL_CLICK)" - DeleteINIStr "$PLUGINSDIR\summary.ini" "Settings" NextButtonText - ${EndIf} - - - ; Remove the "Field 4" ini section in case the user hits back and changes the - ; installation directory which could change whether the make default checkbox - ; should be displayed. - DeleteINISec "$PLUGINSDIR\summary.ini" "Field 4" - - ; Check if it is possible to write to HKLM - ClearErrors - WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test" - ${Unless} ${Errors} - DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" - ; Check if Basilisk is the http handler for this user. - SetShellVarContext current ; Set SHCTX to the current user - ${IsHandlerForInstallDir} "http" $R9 - ${If} $TmpVal == "HKLM" - SetShellVarContext all ; Set SHCTX to all users - ${EndIf} - ; If Basilisk isn't the http handler for this user show the option to set - ; Basilisk as the default browser. - ${If} "$R9" != "true" - ${AndIf} ${AtMostWin2008R2} - WriteINIStr "$PLUGINSDIR\summary.ini" "Settings" NumFields "4" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Type "checkbox" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Text "$(SUMMARY_TAKE_DEFAULTS)" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Left "0" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Right "-1" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" State "1" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Top "32" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field 4" Bottom "53" - ${EndIf} - ${EndUnless} - - ${If} "$TmpVal" == "true" - ; If there is already a Type entry in the "Field 4" section with a value of - ; checkbox then the set as the default browser checkbox is displayed and - ; this text must be moved below it. - ReadINIStr $0 "$PLUGINSDIR\summary.ini" "Field 4" "Type" - ${If} "$0" == "checkbox" - StrCpy $0 "5" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Top "53" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Bottom "68" - ${Else} - StrCpy $0 "4" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Top "35" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Bottom "50" - ${EndIf} - WriteINIStr "$PLUGINSDIR\summary.ini" "Settings" NumFields "$0" - - WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Type "label" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Text "$(SUMMARY_REBOOT_REQUIRED_INSTALL)" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Left "0" - WriteINIStr "$PLUGINSDIR\summary.ini" "Field $0" Right "-1" - ${EndIf} - - !insertmacro MUI_HEADER_TEXT "$(SUMMARY_PAGE_TITLE)" "$(SUMMARY_PAGE_SUBTITLE)" - - ; The Summary custom page has a textbox that will automatically receive - ; focus. This sets the focus to the Install button instead. - !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "summary.ini" - GetDlgItem $0 $HWNDPARENT 1 - System::Call "user32::SetFocus(i r0, i 0x0007, i,i)i" - ${MUI_INSTALLOPTIONS_READ} $1 "summary.ini" "Field 2" "HWND" - SendMessage $1 ${WM_SETTEXT} 0 "STR:$INSTDIR" - !insertmacro MUI_INSTALLOPTIONS_SHOW -FunctionEnd - -Function leaveSummary - ; Try to delete the app executable and if we can't delete it try to find the - ; app's message window and prompt the user to close the app. This allows - ; running an instance that is located in another directory. If for whatever - ; reason there is no message window we will just rename the app's files and - ; then remove them on restart. - ClearErrors - ${DeleteFile} "$INSTDIR\${FileMainEXE}" - ${If} ${Errors} - ${ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_INSTALL)" - ${EndIf} -FunctionEnd - -; When we add an optional action to the finish page the cancel button is -; enabled. This disables it and leaves the finish button as the only choice. -Function preFinish - StrCpy $PageName "" - ${EndInstallLog} "${BrandFullName}" - !insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "settings" "cancelenabled" "0" -FunctionEnd - -################################################################################ -# Initialization Functions - -Function .onInit - ; Remove the current exe directory from the search order. - ; This only effects LoadLibrary calls and not implicitly loaded DLLs. - System::Call 'kernel32::SetDllDirectoryW(w "")' - - StrCpy $PageName "" - StrCpy $LANGUAGE 0 - ${SetBrandNameVars} "$EXEDIR\core\distribution\setup.ini" - - ; Don't install on systems that don't support SSE2. The parameter value of - ; 10 is for PF_XMMI64_INSTRUCTIONS_AVAILABLE which will check whether the - ; SSE2 instruction set is available. Result returned in $R7. - System::Call "kernel32::IsProcessorFeaturePresent(i 10)i .R7" - - ; Windows NT 6.0 (Vista/Server 2008) and lower are not supported. - ${Unless} ${AtLeastWin7} - ${If} "$R7" == "0" - strCpy $R7 "$(WARN_MIN_SUPPORTED_OSVER_CPU_MSG)" - ${Else} - strCpy $R7 "$(WARN_MIN_SUPPORTED_OSVER_MSG)" - ${EndIf} - MessageBox MB_OKCANCEL|MB_ICONSTOP "$R7" IDCANCEL +2 - ExecShell "open" "${URLSystemRequirements}" - Quit - ${EndUnless} - - ; SSE2 CPU support - ${If} "$R7" == "0" - MessageBox MB_OKCANCEL|MB_ICONSTOP "$(WARN_MIN_SUPPORTED_CPU_MSG)" IDCANCEL +2 - ExecShell "open" "${URLSystemRequirements}" - Quit - ${EndIf} - -!ifdef HAVE_64BIT_BUILD - ${Unless} ${RunningX64} - MessageBox MB_OKCANCEL|MB_ICONSTOP "$(WARN_MIN_SUPPORTED_OSVER_MSG)" IDCANCEL +2 - ExecShell "open" "${URLSystemRequirements}" - Quit - ${EndUnless} - SetRegView 64 -!endif - - ${InstallOnInitCommon} "$(WARN_MIN_SUPPORTED_OSVER_CPU_MSG)" - -; The commands inside this ifndef are needed prior to NSIS 3.0a2 and can be -; removed after we require NSIS 3.0a2 or greater. -!ifndef NSIS_PACKEDVERSION - ${If} ${AtLeastWinVista} - System::Call 'user32::SetProcessDPIAware()' - ${EndIf} -!endif - - !insertmacro InitInstallOptionsFile "options.ini" - !insertmacro InitInstallOptionsFile "shortcuts.ini" - !insertmacro InitInstallOptionsFile "components.ini" - !insertmacro InitInstallOptionsFile "summary.ini" - - WriteINIStr "$PLUGINSDIR\options.ini" "Settings" NumFields "5" - - WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Type "label" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Text "$(OPTIONS_SUMMARY)" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Left "0" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Right "-1" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Top "0" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 1" Bottom "10" - - WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Type "RadioButton" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Text "$(OPTION_STANDARD_RADIO)" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Left "0" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Right "-1" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Top "25" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Bottom "35" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" State "1" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 2" Flags "GROUP" - - WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Type "RadioButton" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Text "$(OPTION_CUSTOM_RADIO)" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Left "0" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Right "-1" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Top "55" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" Bottom "65" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 3" State "0" - - WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Type "label" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Text "$(OPTION_STANDARD_DESC)" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Left "15" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Right "-1" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Top "37" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 4" Bottom "57" - - WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Type "label" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Text "$(OPTION_CUSTOM_DESC)" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Left "15" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Right "-1" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Top "67" - WriteINIStr "$PLUGINSDIR\options.ini" "Field 5" Bottom "87" - - ; Setup the shortcuts.ini file for the Custom Shortcuts Page - ; Don't offer to install the quick launch shortcut on Windows 7 - ${If} ${AtLeastWin7} - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Settings" NumFields "3" - ${Else} - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Settings" NumFields "4" - ${EndIf} - - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Type "label" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Text "$(CREATE_ICONS_DESC)" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Left "0" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Right "-1" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Top "5" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 1" Bottom "15" - - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Type "checkbox" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Text "$(ICONS_DESKTOP)" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Left "0" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Right "-1" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Top "20" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Bottom "30" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" State "1" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 2" Flags "GROUP" - - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Type "checkbox" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Text "$(ICONS_STARTMENU)" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Left "0" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Right "-1" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Top "40" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" Bottom "50" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 3" State "1" - - ; Don't offer to install the quick launch shortcut on Windows 7 - ${Unless} ${AtLeastWin7} - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Type "checkbox" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Text "$(ICONS_QUICKLAUNCH)" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Left "0" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Right "-1" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Top "60" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" Bottom "70" - WriteINIStr "$PLUGINSDIR\shortcuts.ini" "Field 4" State "1" - ${EndUnless} - - ; Setup the components.ini file for the Components Page - WriteINIStr "$PLUGINSDIR\components.ini" "Settings" NumFields "2" - - WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Type "label" - WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Text "$(OPTIONAL_COMPONENTS_DESC)" - WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Left "0" - WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Right "-1" - WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Top "5" - WriteINIStr "$PLUGINSDIR\components.ini" "Field 1" Bottom "25" - - WriteINIStr "$PLUGINSDIR\components.ini" "Field 2" Type "checkbox" - WriteINIStr "$PLUGINSDIR\components.ini" "Field 2" Text "$(MAINTENANCE_SERVICE_CHECKBOX_DESC)" - WriteINIStr "$PLUGINSDIR\components.ini" "Field 2" Left "0" - WriteINIStr "$PLUGINSDIR\components.ini" "Field 2" Right "-1" - WriteINIStr "$PLUGINSDIR\components.ini" "Field 2" Top "27" - WriteINIStr "$PLUGINSDIR\components.ini" "Field 2" Bottom "37" - WriteINIStr "$PLUGINSDIR\components.ini" "Field 2" State "1" - WriteINIStr "$PLUGINSDIR\components.ini" "Field 2" Flags "GROUP" - - ; There must always be a core directory. - ${GetSize} "$EXEDIR\core\" "/S=0K" $R5 $R7 $R8 - SectionSetSize ${APP_IDX} $R5 - - ; Initialize $hHeaderBitmap to prevent redundant changing of the bitmap if - ; the user clicks the back button - StrCpy $hHeaderBitmap "" -FunctionEnd - -Function .onGUIEnd - ${OnEndCommon} -FunctionEnd diff --git a/application/basilisk/installer/windows/nsis/maintenanceservice_installer.nsi b/application/basilisk/installer/windows/nsis/maintenanceservice_installer.nsi deleted file mode 100644 index fe01fe794..000000000 --- a/application/basilisk/installer/windows/nsis/maintenanceservice_installer.nsi +++ /dev/null @@ -1,340 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -; Set verbosity to 3 (e.g. no script) to lessen the noise in the build logs -!verbose 3 - -; 7-Zip provides better compression than the lzma from NSIS so we add the files -; uncompressed and use 7-Zip to create a SFX archive of it -SetDatablockOptimize on -SetCompress off -CRCCheck on - -RequestExecutionLevel admin - -; The commands inside this ifdef require NSIS 3.0a2 or greater so the ifdef can -; be removed after we require NSIS 3.0a2 or greater. -!ifdef NSIS_PACKEDVERSION - Unicode true - ManifestSupportedOS all - ManifestDPIAware true -!endif - -!addplugindir ./ - -; Variables -Var TempMaintServiceName -Var BrandFullNameDA -Var BrandFullName - -; Other included files may depend upon these includes! -; The following includes are provided by NSIS. -!include FileFunc.nsh -!include LogicLib.nsh -!include MUI.nsh -!include WinMessages.nsh -!include WinVer.nsh -!include WordFunc.nsh - -!insertmacro GetOptions -!insertmacro GetParameters -!insertmacro GetSize - -; The test slaves use this fallback key to run tests. -; And anyone that wants to run tests themselves should already have -; this installed. -!define FallbackKey \ - "SOFTWARE\Mozilla\MaintenanceService\3932ecacee736d366d6436db0f55bce4" - -!define CompanyName "Mozilla Corporation" -!define BrandFullNameInternal "" - -; The following includes are custom. -!include defines.nsi -; We keep defines.nsi defined so that we get other things like -; the version number, but we redefine BrandFullName -!define MaintFullName "Mozilla Maintenance Service" -!undef BrandFullName -!define BrandFullName "${MaintFullName}" - -!include common.nsh -!include locales.nsi - -VIAddVersionKey "FileDescription" "${MaintFullName} Installer" -VIAddVersionKey "OriginalFilename" "maintenanceservice_installer.exe" - -Name "${MaintFullName}" -OutFile "maintenanceservice_installer.exe" - -; Get installation folder from registry if available -InstallDirRegKey HKLM "Software\Mozilla\MaintenanceService" "" - -SetOverwrite on - -; serviceinstall.cpp also uses this key, in case the path is changed, update -; there too. -!define MaintUninstallKey \ - "Software\Microsoft\Windows\CurrentVersion\Uninstall\MozillaMaintenanceService" - -; Always install into the 32-bit location even if we have a 64-bit build. -; This is because we use only 1 service for all Firefox channels. -; Allow either x86 and x64 builds to exist at this location, depending on -; what is the latest build. -InstallDir "$PROGRAMFILES32\${MaintFullName}\" -ShowUnInstDetails nevershow - -################################################################################ -# Modern User Interface - MUI - -!define MUI_ICON setup.ico -!define MUI_UNICON setup.ico -!define MUI_WELCOMEPAGE_TITLE_3LINES -!define MUI_UNWELCOMEFINISHPAGE_BITMAP wizWatermark.bmp - -;Interface Settings -!define MUI_ABORTWARNING - -; Uninstaller Pages -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_INSTFILES - -################################################################################ -# Language - -!insertmacro MOZ_MUI_LANGUAGE 'baseLocale' -!verbose push -!verbose 3 -!include "overrideLocale.nsh" -!include "customLocale.nsh" -!verbose pop - -; Set this after the locale files to override it if it is in the locale -; using " " for BrandingText will hide the "Nullsoft Install System..." branding -BrandingText " " - -Function .onInit - ; Remove the current exe directory from the search order. - ; This only effects LoadLibrary calls and not implicitly loaded DLLs. - System::Call 'kernel32::SetDllDirectoryW(w "")' - - SetSilent silent - - ${Unless} ${AtLeastWin7} - Abort - ${EndUnless} -FunctionEnd - -Function un.onInit - ; Remove the current exe directory from the search order. - ; This only effects LoadLibrary calls and not implicitly loaded DLLs. - System::Call 'kernel32::SetDllDirectoryW(w "")' - -; The commands inside this ifndef are needed prior to NSIS 3.0a2 and can be -; removed after we require NSIS 3.0a2 or greater. -!ifndef NSIS_PACKEDVERSION - ${If} ${AtLeastWinVista} - System::Call 'user32::SetProcessDPIAware()' - ${EndIf} -!endif - - StrCpy $BrandFullNameDA "${MaintFullName}" - StrCpy $BrandFullName "${MaintFullName}" -FunctionEnd - -Section "MaintenanceService" - AllowSkipFiles off - - CreateDirectory $INSTDIR - SetOutPath $INSTDIR - - ; If the service already exists, then it will be stopped when upgrading it - ; via the maintenanceservice_tmp.exe command executed below. - ; The maintenanceservice_tmp.exe command will rename the file to - ; maintenanceservice.exe if maintenanceservice_tmp.exe is newer. - ; If the service does not exist yet, we install it and drop the file on - ; disk as maintenanceservice.exe directly. - StrCpy $TempMaintServiceName "maintenanceservice.exe" - IfFileExists "$INSTDIR\maintenanceservice.exe" 0 skipAlreadyExists - StrCpy $TempMaintServiceName "maintenanceservice_tmp.exe" - skipAlreadyExists: - - ; We always write out a copy and then decide whether to install it or - ; not via calling its 'install' cmdline which works by version comparison. - CopyFiles "$EXEDIR\maintenanceservice.exe" "$INSTDIR\$TempMaintServiceName" - - ; The updater.ini file is only used when performing an install or upgrade, - ; and only if that install or upgrade is successful. If an old updater.ini - ; happened to be copied into the maintenance service installation directory - ; but the service was not newer, the updater.ini file would be unused. - ; It is used to fill the description of the service on success. - CopyFiles "$EXEDIR\updater.ini" "$INSTDIR\updater.ini" - - ; Install the application maintenance service. - ; If a service already exists, the command line parameter will stop the - ; service and only install itself if it is newer than the already installed - ; service. If successful it will remove the old maintenanceservice.exe - ; and replace it with maintenanceservice_tmp.exe. - ClearErrors - ${GetParameters} $0 - ${GetOptions} "$0" "/Upgrade" $0 - ${If} ${Errors} - ExecWait '"$INSTDIR\$TempMaintServiceName" install' - ${Else} - ; The upgrade cmdline is the same as install except - ; It will fail if the service isn't already installed. - ExecWait '"$INSTDIR\$TempMaintServiceName" upgrade' - ${EndIf} - - WriteUninstaller "$INSTDIR\Uninstall.exe" - - ; Since the Maintenance service can be installed either x86 or x64, - ; always use the 64-bit registry. - ${If} ${RunningX64} - ; Previous versions always created the uninstall key in the 32-bit registry. - ; Clean those old entries out if they still exist. - SetRegView 32 - DeleteRegKey HKLM "${MaintUninstallKey}" - ; Preserve the lastused value before we switch to 64. - SetRegView lastused - - SetRegView 64 - ${EndIf} - - WriteRegStr HKLM "${MaintUninstallKey}" "DisplayName" "${MaintFullName}" - WriteRegStr HKLM "${MaintUninstallKey}" "UninstallString" \ - '"$INSTDIR\uninstall.exe"' - WriteRegStr HKLM "${MaintUninstallKey}" "DisplayIcon" \ - "$INSTDIR\Uninstall.exe,0" - WriteRegStr HKLM "${MaintUninstallKey}" "DisplayVersion" "${AppVersion}" - WriteRegStr HKLM "${MaintUninstallKey}" "Publisher" "Mozilla" - WriteRegStr HKLM "${MaintUninstallKey}" "Comments" "${BrandFullName}" - WriteRegDWORD HKLM "${MaintUninstallKey}" "NoModify" 1 - ${GetSize} "$INSTDIR" "/S=0K" $R2 $R3 $R4 - WriteRegDWORD HKLM "${MaintUninstallKey}" "EstimatedSize" $R2 - - ; Write out that a maintenance service was attempted. - ; We do this because on upgrades we will check this value and we only - ; want to install once on the first upgrade to maintenance service. - ; Also write out that we are currently installed, preferences will check - ; this value to determine if we should show the service update pref. - WriteRegDWORD HKLM "Software\Mozilla\MaintenanceService" "Attempted" 1 - WriteRegDWORD HKLM "Software\Mozilla\MaintenanceService" "Installed" 1 - DeleteRegValue HKLM "Software\Mozilla\MaintenanceService" "FFPrefetchDisabled" - - ; Included here for debug purposes only. - ; These keys are used to bypass the installation dir is a valid installation - ; check from the service so that tests can be run. - ; WriteRegStr HKLM "${FallbackKey}\0" "name" "Mozilla Corporation" - ; WriteRegStr HKLM "${FallbackKey}\0" "issuer" "DigiCert SHA2 Assured ID Code Signing CA" - ${If} ${RunningX64} - SetRegView lastused - ${EndIf} -SectionEnd - -; By renaming before deleting we improve things slightly in case -; there is a file in use error. In this case a new install can happen. -Function un.RenameDelete - Pop $9 - ; If the .moz-delete file already exists previously, delete it - ; If it doesn't exist, the call is ignored. - ; We don't need to pass /REBOOTOK here since it was already marked that way - ; if it exists. - Delete "$9.moz-delete" - Rename "$9" "$9.moz-delete" - ${If} ${Errors} - Delete /REBOOTOK "$9" - ${Else} - Delete /REBOOTOK "$9.moz-delete" - ${EndIf} - ClearErrors -FunctionEnd - -Section "Uninstall" - ; Delete the service so that no updates will be attempted - ExecWait '"$INSTDIR\maintenanceservice.exe" uninstall' - - Push "$INSTDIR\updater.ini" - Call un.RenameDelete - Push "$INSTDIR\maintenanceservice.exe" - Call un.RenameDelete - Push "$INSTDIR\maintenanceservice_tmp.exe" - Call un.RenameDelete - Push "$INSTDIR\maintenanceservice.old" - Call un.RenameDelete - Push "$INSTDIR\Uninstall.exe" - Call un.RenameDelete - Push "$INSTDIR\update\updater.ini" - Call un.RenameDelete - Push "$INSTDIR\update\updater.exe" - Call un.RenameDelete - Push "$INSTDIR\logs\maintenanceservice.log" - Call un.RenameDelete - Push "$INSTDIR\logs\maintenanceservice-1.log" - Call un.RenameDelete - Push "$INSTDIR\logs\maintenanceservice-2.log" - Call un.RenameDelete - Push "$INSTDIR\logs\maintenanceservice-3.log" - Call un.RenameDelete - Push "$INSTDIR\logs\maintenanceservice-4.log" - Call un.RenameDelete - Push "$INSTDIR\logs\maintenanceservice-5.log" - Call un.RenameDelete - Push "$INSTDIR\logs\maintenanceservice-6.log" - Call un.RenameDelete - Push "$INSTDIR\logs\maintenanceservice-7.log" - Call un.RenameDelete - Push "$INSTDIR\logs\maintenanceservice-8.log" - Call un.RenameDelete - Push "$INSTDIR\logs\maintenanceservice-9.log" - Call un.RenameDelete - Push "$INSTDIR\logs\maintenanceservice-10.log" - Call un.RenameDelete - Push "$INSTDIR\logs\maintenanceservice-install.log" - Call un.RenameDelete - Push "$INSTDIR\logs\maintenanceservice-uninstall.log" - Call un.RenameDelete - SetShellVarContext all - Push "$APPDATA\Mozilla\logs\maintenanceservice.log" - Call un.RenameDelete - Push "$APPDATA\Mozilla\logs\maintenanceservice-1.log" - Call un.RenameDelete - Push "$APPDATA\Mozilla\logs\maintenanceservice-2.log" - Call un.RenameDelete - Push "$APPDATA\Mozilla\logs\maintenanceservice-3.log" - Call un.RenameDelete - Push "$APPDATA\Mozilla\logs\maintenanceservice-4.log" - Call un.RenameDelete - Push "$APPDATA\Mozilla\logs\maintenanceservice-5.log" - Call un.RenameDelete - Push "$APPDATA\Mozilla\logs\maintenanceservice-6.log" - Call un.RenameDelete - Push "$APPDATA\Mozilla\logs\maintenanceservice-7.log" - Call un.RenameDelete - Push "$APPDATA\Mozilla\logs\maintenanceservice-8.log" - Call un.RenameDelete - Push "$APPDATA\Mozilla\logs\maintenanceservice-9.log" - Call un.RenameDelete - Push "$APPDATA\Mozilla\logs\maintenanceservice-10.log" - Call un.RenameDelete - Push "$APPDATA\Mozilla\logs\maintenanceservice-install.log" - Call un.RenameDelete - Push "$APPDATA\Mozilla\logs\maintenanceservice-uninstall.log" - Call un.RenameDelete - RMDir /REBOOTOK "$APPDATA\Mozilla\logs" - RMDir /REBOOTOK "$APPDATA\Mozilla" - RMDir /REBOOTOK "$INSTDIR\logs" - RMDir /REBOOTOK "$INSTDIR\update" - RMDir /REBOOTOK "$INSTDIR" - - ${If} ${RunningX64} - SetRegView 64 - ${EndIf} - DeleteRegKey HKLM "${MaintUninstallKey}" - DeleteRegValue HKLM "Software\Mozilla\MaintenanceService" "Installed" - DeleteRegValue HKLM "Software\Mozilla\MaintenanceService" "FFPrefetchDisabled" - DeleteRegKey HKLM "${FallbackKey}\" - ${If} ${RunningX64} - SetRegView lastused - ${EndIf} -SectionEnd diff --git a/application/basilisk/installer/windows/nsis/shared.nsh b/application/basilisk/installer/windows/nsis/shared.nsh deleted file mode 100644 index 4f364929a..000000000 --- a/application/basilisk/installer/windows/nsis/shared.nsh +++ /dev/null @@ -1,1410 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -!macro PostUpdate - ; PostUpdate is called from both session 0 and from the user session - ; for service updates, make sure that we only register with the user session - ; Otherwise ApplicationID::Set can fail intermittently with a file in use error. - System::Call "kernel32::GetCurrentProcessId() i.r0" - System::Call "kernel32::ProcessIdToSessionId(i $0, *i ${NSIS_MAX_STRLEN} r9)" - - ; Determine if we're the protected UserChoice default or not. If so fix the - ; start menu tile. In case there are 2 Basilisk installations, we only do - ; this if the application being updated is the default. - ReadRegStr $0 HKCU "Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice" "ProgId" - ${If} $0 == "BasiliskURL" - ${AndIf} $9 != 0 ; We're not running in session 0 - ReadRegStr $0 HKCU "Software\Classes\BasiliskURL\shell\open\command" "" - ${GetPathFromString} "$0" $0 - ${GetParent} "$0" $0 - ${If} ${FileExists} "$0" - ${GetLongPath} "$0" $0 - ${EndIf} - ${EndIf} - - ${CreateShortcutsLog} - - ; Remove registry entries for non-existent apps and for apps that point to our - ; install location in the Software\Mozilla key and uninstall registry entries - ; that point to our install location for both HKCU and HKLM. - SetShellVarContext current ; Set SHCTX to the current user (e.g. HKCU) - ${RegCleanMain} "Software\Mozilla" - ${RegCleanUninstall} - ${UpdateProtocolHandlers} - - ; setup the application model id registration value - ${InitHashAppModelId} "$INSTDIR" "Software\Mozilla\${AppName}\TaskBarIDs" - - ; Win7 taskbar and start menu link maintenance - Call FixShortcutAppModelIDs - - ClearErrors - WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test" - ${If} ${Errors} - StrCpy $TmpVal "HKCU" ; used primarily for logging - ${Else} - SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM) - DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" - StrCpy $TmpVal "HKLM" ; used primarily for logging - ${RegCleanMain} "Software\Mozilla" - ${RegCleanUninstall} - ${UpdateProtocolHandlers} - ${FixShellIconHandler} "HKLM" - ${SetAppLSPCategories} ${LSP_CATEGORIES} - - ; Win7 taskbar and start menu link maintenance - Call FixShortcutAppModelIDs - - ; Add the Firewall entries after an update - Call AddFirewallEntries - - ; Only update the Clients\StartMenuInternet registry key values in HKLM if - ; they don't exist or this installation is the same as the one set in those - ; keys. - ${StrFilter} "${FileMainEXE}" "+" "" "" $1 - ReadRegStr $0 HKLM "Software\Clients\StartMenuInternet\$1\DefaultIcon" "" - ${GetPathFromString} "$0" $0 - ${GetParent} "$0" $0 - ${If} ${FileExists} "$0" - ${GetLongPath} "$0" $0 - ${EndIf} - ${If} "$0" == "$INSTDIR" - ${SetStartMenuInternet} "HKLM" - ${EndIf} - - ; Only update the Clients\StartMenuInternet registry key values in HKCU if - ; they don't exist or this installation is the same as the one set in those - ; keys. This is only done in Windows 8 to avoid a UAC prompt. - ${If} ${AtLeastWin8} - ReadRegStr $0 HKCU "Software\Clients\StartMenuInternet\$1\DefaultIcon" "" - ${GetPathFromString} "$0" $0 - ${GetParent} "$0" $0 - ${If} ${FileExists} "$0" - ${GetLongPath} "$0" $0 - ${EndIf} - ${If} "$0" == "$INSTDIR" - ${SetStartMenuInternet} "HKCU" - ${EndIf} - ${EndIf} - - ReadRegStr $0 HKLM "Software\mozilla.org\Mozilla" "CurrentVersion" - ${If} "$0" != "${GREVersion}" - WriteRegStr HKLM "Software\mozilla.org\Mozilla" "CurrentVersion" "${GREVersion}" - ${EndIf} - ${EndIf} - - ; Migrate the application's Start Menu directory to a single shortcut in the - ; root of the Start Menu Programs directory. - ${MigrateStartMenuShortcut} - - ; Update lastwritetime of the Start Menu shortcut to clear the tile cache. - ${If} ${AtLeastWin8} - ${AndIf} ${FileExists} "$SMPROGRAMS\${BrandFullName}.lnk" - FileOpen $0 "$SMPROGRAMS\${BrandFullName}.lnk" a - FileClose $0 - ${EndIf} - - ; Adds a pinned Task Bar shortcut (see MigrateTaskBarShortcut for details). - ${MigrateTaskBarShortcut} - - ${RemoveDeprecatedKeys} - - ${SetAppKeys} - ${FixClassKeys} - ${SetUninstallKeys} - - ; Remove files that may be left behind by the application in the - ; VirtualStore directory. - ${CleanVirtualStore} - - ${RemoveDeprecatedFiles} - - ; Fix the distribution.ini file if applicable - ${FixDistributionsINI} - - RmDir /r /REBOOTOK "$INSTDIR\${TO_BE_DELETED}" - -!ifdef MOZ_MAINTENANCE_SERVICE - Call IsUserAdmin - Pop $R0 - ${If} $R0 == "true" - ; Only proceed if we have HKLM write access - ${AndIf} $TmpVal == "HKLM" - ; On Windows 2000 we do not install the maintenance service. - ${AndIf} ${AtLeastWinXP} - ; We check to see if the maintenance service install was already attempted. - ; Since the Maintenance service can be installed either x86 or x64, - ; always use the 64-bit registry for checking if an attempt was made. - ${If} ${RunningX64} - SetRegView 64 - ${EndIf} - ReadRegDWORD $5 HKLM "Software\Mozilla\MaintenanceService" "Attempted" - ClearErrors - ${If} ${RunningX64} - SetRegView lastused - ${EndIf} - - ; Add the registry keys for allowed certificates. - ${AddMaintCertKeys} - - ; If the maintenance service is already installed, do nothing. - ; The maintenance service will launch: - ; maintenanceservice_installer.exe /Upgrade to upgrade the maintenance - ; service if necessary. If the update was done from updater.exe without - ; the service (i.e. service is failing), updater.exe will do the update of - ; the service. The reasons we do not do it here is because we don't want - ; to have to prompt for limited user accounts when the service isn't used - ; and we currently call the PostUpdate twice, once for the user and once - ; for the SYSTEM account. Also, this would stop the maintenance service - ; and we need a return result back to the service when run that way. - ${If} $5 == "" - ; An install of maintenance service was never attempted. - ; We know we are an Admin and that we have write access into HKLM - ; based on the above checks, so attempt to just run the EXE. - ; In the worst case, in case there is some edge case with the - ; IsAdmin check and the permissions check, the maintenance service - ; will just fail to be attempted to be installed. - nsExec::Exec "$\"$INSTDIR\maintenanceservice_installer.exe$\"" - ${EndIf} - ${EndIf} -!endif -!macroend -!define PostUpdate "!insertmacro PostUpdate" - -!macro SetAsDefaultAppGlobal - ${RemoveDeprecatedKeys} ; Does not use SHCTX - - SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM) - ${SetHandlers} ; Uses SHCTX - ${SetStartMenuInternet} "HKLM" - ${FixShellIconHandler} "HKLM" - ${ShowShortcuts} - ${StrFilter} "${FileMainEXE}" "+" "" "" $R9 - WriteRegStr HKLM "Software\Clients\StartMenuInternet" "" "$R9" -!macroend -!define SetAsDefaultAppGlobal "!insertmacro SetAsDefaultAppGlobal" - -; Removes shortcuts for this installation. This should also remove the -; application from Open With for the file types the application handles -; (bug 370480). -!macro HideShortcuts - ${StrFilter} "${FileMainEXE}" "+" "" "" $0 - StrCpy $R1 "Software\Clients\StartMenuInternet\$0\InstallInfo" - WriteRegDWORD HKLM "$R1" "IconsVisible" 0 - ${If} ${AtLeastWin8} - WriteRegDWORD HKCU "$R1" "IconsVisible" 0 - ${EndIf} - - SetShellVarContext all ; Set $DESKTOP to All Users - ${Unless} ${FileExists} "$DESKTOP\${BrandFullName}.lnk" - SetShellVarContext current ; Set $DESKTOP to the current user's desktop - ${EndUnless} - - ${If} ${FileExists} "$DESKTOP\${BrandFullName}.lnk" - ShellLink::GetShortCutArgs "$DESKTOP\${BrandFullName}.lnk" - Pop $0 - ${If} "$0" == "" - ShellLink::GetShortCutTarget "$DESKTOP\${BrandFullName}.lnk" - Pop $0 - ${GetLongPath} "$0" $0 - ${If} "$0" == "$INSTDIR\${FileMainEXE}" - Delete "$DESKTOP\${BrandFullName}.lnk" - ${EndIf} - ${EndIf} - ${EndIf} - - SetShellVarContext all ; Set $SMPROGRAMS to All Users - ${Unless} ${FileExists} "$SMPROGRAMS\${BrandFullName}.lnk" - SetShellVarContext current ; Set $SMPROGRAMS to the current user's Start - ; Menu Programs directory - ${EndUnless} - - ${If} ${FileExists} "$SMPROGRAMS\${BrandFullName}.lnk" - ShellLink::GetShortCutArgs "$SMPROGRAMS\${BrandFullName}.lnk" - Pop $0 - ${If} "$0" == "" - ShellLink::GetShortCutTarget "$SMPROGRAMS\${BrandFullName}.lnk" - Pop $0 - ${GetLongPath} "$0" $0 - ${If} "$0" == "$INSTDIR\${FileMainEXE}" - Delete "$SMPROGRAMS\${BrandFullName}.lnk" - ${EndIf} - ${EndIf} - ${EndIf} - - ${If} ${FileExists} "$QUICKLAUNCH\${BrandFullName}.lnk" - ShellLink::GetShortCutArgs "$QUICKLAUNCH\${BrandFullName}.lnk" - Pop $0 - ${If} "$0" == "" - ShellLink::GetShortCutTarget "$QUICKLAUNCH\${BrandFullName}.lnk" - Pop $0 - ${GetLongPath} "$0" $0 - ${If} "$0" == "$INSTDIR\${FileMainEXE}" - Delete "$QUICKLAUNCH\${BrandFullName}.lnk" - ${EndIf} - ${EndIf} - ${EndIf} -!macroend -!define HideShortcuts "!insertmacro HideShortcuts" - -; Adds shortcuts for this installation. This should also add the application -; to Open With for the file types the application handles (bug 370480). -!macro ShowShortcuts - ${StrFilter} "${FileMainEXE}" "+" "" "" $0 - StrCpy $R1 "Software\Clients\StartMenuInternet\$0\InstallInfo" - WriteRegDWORD HKLM "$R1" "IconsVisible" 1 - ${If} ${AtLeastWin8} - WriteRegDWORD HKCU "$R1" "IconsVisible" 1 - ${EndIf} - - SetShellVarContext all ; Set $DESKTOP to All Users - ${Unless} ${FileExists} "$DESKTOP\${BrandFullName}.lnk" - CreateShortCut "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" - ${If} ${FileExists} "$DESKTOP\${BrandFullName}.lnk" - ShellLink::SetShortCutWorkingDirectory "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR" - ${If} ${AtLeastWin7} - ${AndIf} "$AppUserModelID" != "" - ApplicationID::Set "$DESKTOP\${BrandFullName}.lnk" "$AppUserModelID" "true" - ${EndIf} - ${Else} - SetShellVarContext current ; Set $DESKTOP to the current user's desktop - ${Unless} ${FileExists} "$DESKTOP\${BrandFullName}.lnk" - CreateShortCut "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" - ${If} ${FileExists} "$DESKTOP\${BrandFullName}.lnk" - ShellLink::SetShortCutWorkingDirectory "$DESKTOP\${BrandFullName}.lnk" \ - "$INSTDIR" - ${If} ${AtLeastWin7} - ${AndIf} "$AppUserModelID" != "" - ApplicationID::Set "$DESKTOP\${BrandFullName}.lnk" "$AppUserModelID" "true" - ${EndIf} - ${EndIf} - ${EndUnless} - ${EndIf} - ${EndUnless} - - SetShellVarContext all ; Set $SMPROGRAMS to All Users - ${Unless} ${FileExists} "$SMPROGRAMS\${BrandFullName}.lnk" - CreateShortCut "$SMPROGRAMS\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" - ${If} ${FileExists} "$SMPROGRAMS\${BrandFullName}.lnk" - ShellLink::SetShortCutWorkingDirectory "$SMPROGRAMS\${BrandFullName}.lnk" \ - "$INSTDIR" - ${If} ${AtLeastWin7} - ${AndIf} "$AppUserModelID" != "" - ApplicationID::Set "$SMPROGRAMS\${BrandFullName}.lnk" "$AppUserModelID" "true" - ${EndIf} - ${Else} - SetShellVarContext current ; Set $SMPROGRAMS to the current user's Start - ; Menu Programs directory - ${Unless} ${FileExists} "$SMPROGRAMS\${BrandFullName}.lnk" - CreateShortCut "$SMPROGRAMS\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" - ${If} ${FileExists} "$SMPROGRAMS\${BrandFullName}.lnk" - ShellLink::SetShortCutWorkingDirectory "$SMPROGRAMS\${BrandFullName}.lnk" \ - "$INSTDIR" - ${If} ${AtLeastWin7} - ${AndIf} "$AppUserModelID" != "" - ApplicationID::Set "$SMPROGRAMS\${BrandFullName}.lnk" "$AppUserModelID" "true" - ${EndIf} - ${EndIf} - ${EndUnless} - ${EndIf} - ${EndUnless} - - ; Windows 7 doesn't use the QuickLaunch directory - ${Unless} ${AtLeastWin7} - ${AndUnless} ${FileExists} "$QUICKLAUNCH\${BrandFullName}.lnk" - CreateShortCut "$QUICKLAUNCH\${BrandFullName}.lnk" \ - "$INSTDIR\${FileMainEXE}" - ${If} ${FileExists} "$QUICKLAUNCH\${BrandFullName}.lnk" - ShellLink::SetShortCutWorkingDirectory "$QUICKLAUNCH\${BrandFullName}.lnk" \ - "$INSTDIR" - ${EndIf} - ${EndUnless} -!macroend -!define ShowShortcuts "!insertmacro ShowShortcuts" - -!macro AddAssociationIfNoneExist FILE_TYPE - ClearErrors - EnumRegKey $7 HKCR "${FILE_TYPE}" 0 - ${If} ${Errors} - WriteRegStr SHCTX "SOFTWARE\Classes\${FILE_TYPE}" "" "BasiliskHTML" - ${EndIf} - WriteRegStr SHCTX "SOFTWARE\Classes\${FILE_TYPE}\OpenWithProgids" "BasiliskHTML" "" -!macroend -!define AddAssociationIfNoneExist "!insertmacro AddAssociationIfNoneExist" - -; Adds the protocol and file handler registry entries for making Basilisk the -; default handler (uses SHCTX). -!macro SetHandlers - ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8 - - StrCpy $0 "SOFTWARE\Classes" - StrCpy $2 "$\"$8$\" -osint -url $\"%1$\"" - - ; Associate the file handlers with BasiliskHTML - ReadRegStr $6 SHCTX "$0\.htm" "" - ${If} "$6" != "BasiliskHTML" - WriteRegStr SHCTX "$0\.htm" "" "BasiliskHTML" - ${EndIf} - - ReadRegStr $6 SHCTX "$0\.html" "" - ${If} "$6" != "BasiliskHTML" - WriteRegStr SHCTX "$0\.html" "" "BasiliskHTML" - ${EndIf} - - ReadRegStr $6 SHCTX "$0\.shtml" "" - ${If} "$6" != "BasiliskHTML" - WriteRegStr SHCTX "$0\.shtml" "" "BasiliskHTML" - ${EndIf} - - ReadRegStr $6 SHCTX "$0\.xht" "" - ${If} "$6" != "BasiliskHTML" - WriteRegStr SHCTX "$0\.xht" "" "BasiliskHTML" - ${EndIf} - - ReadRegStr $6 SHCTX "$0\.xhtml" "" - ${If} "$6" != "BasiliskHTML" - WriteRegStr SHCTX "$0\.xhtml" "" "BasiliskHTML" - ${EndIf} - - ${AddAssociationIfNoneExist} ".pdf" - ${AddAssociationIfNoneExist} ".oga" - ${AddAssociationIfNoneExist} ".ogg" - ${AddAssociationIfNoneExist} ".ogv" - ${AddAssociationIfNoneExist} ".pdf" - ${AddAssociationIfNoneExist} ".webm" - - ; An empty string is used for the 5th param because BasiliskHTML is not a - ; protocol handler - ${AddDisabledDDEHandlerValues} "BasiliskHTML" "$2" "$8,1" \ - "${AppRegName} HTML Document" "" - - ${AddDisabledDDEHandlerValues} "BasiliskURL" "$2" "$8,1" "${AppRegName} URL" \ - "true" - ; An empty string is used for the 4th & 5th params because the following - ; protocol handlers already have a display name and the additional keys - ; required for a protocol handler. - ${AddDisabledDDEHandlerValues} "ftp" "$2" "$8,1" "" "" - ${AddDisabledDDEHandlerValues} "http" "$2" "$8,1" "" "" - ${AddDisabledDDEHandlerValues} "https" "$2" "$8,1" "" "" -!macroend -!define SetHandlers "!insertmacro SetHandlers" - -; Adds the HKLM\Software\Clients\StartMenuInternet\FIREFOX.EXE registry -; entries (does not use SHCTX). -; -; The values for StartMenuInternet are only valid under HKLM and there can only -; be one installation registerred under StartMenuInternet per application since -; the key name is derived from the main application executable. -; http://support.microsoft.com/kb/297878 -; -; In Windows 8 this changes slightly, you can store StartMenuInternet entries in -; HKCU. The icon in start menu for StartMenuInternet is deprecated as of Win7, -; but the subkeys are what's important. Control panel default programs looks -; for them only in HKLM pre win8. -; -; Note: we might be able to get away with using the full path to the -; application executable for the key name in order to support multiple -; installations. -!macro SetStartMenuInternet RegKey - ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8 - ${GetLongPath} "$INSTDIR\uninstall\helper.exe" $7 - - ${StrFilter} "${FileMainEXE}" "+" "" "" $R9 - - StrCpy $0 "Software\Clients\StartMenuInternet\$R9" - - WriteRegStr ${RegKey} "$0" "" "${BrandFullName}" - - WriteRegStr ${RegKey} "$0\DefaultIcon" "" "$8,0" - - ; The Reinstall Command is defined at - ; http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_adv/registeringapps.asp - WriteRegStr ${RegKey} "$0\InstallInfo" "HideIconsCommand" "$\"$7$\" /HideShortcuts" - WriteRegStr ${RegKey} "$0\InstallInfo" "ShowIconsCommand" "$\"$7$\" /ShowShortcuts" - WriteRegStr ${RegKey} "$0\InstallInfo" "ReinstallCommand" "$\"$7$\" /SetAsDefaultAppGlobal" - - ClearErrors - ReadRegDWORD $1 ${RegKey} "$0\InstallInfo" "IconsVisible" - ; If the IconsVisible name value pair doesn't exist add it otherwise the - ; application won't be displayed in Set Program Access and Defaults. - ${If} ${Errors} - ${If} ${FileExists} "$QUICKLAUNCH\${BrandFullName}.lnk" - WriteRegDWORD ${RegKey} "$0\InstallInfo" "IconsVisible" 1 - ${Else} - WriteRegDWORD ${RegKey} "$0\InstallInfo" "IconsVisible" 0 - ${EndIf} - ${EndIf} - - WriteRegStr ${RegKey} "$0\shell\open\command" "" "$\"$8$\"" - - WriteRegStr ${RegKey} "$0\shell\properties" "" "$(CONTEXT_OPTIONS)" - WriteRegStr ${RegKey} "$0\shell\properties\command" "" "$\"$8$\" -preferences" - - WriteRegStr ${RegKey} "$0\shell\safemode" "" "$(CONTEXT_SAFE_MODE)" - WriteRegStr ${RegKey} "$0\shell\safemode\command" "" "$\"$8$\" -safe-mode" - - ; Vista Capabilities registry keys - WriteRegStr ${RegKey} "$0\Capabilities" "ApplicationDescription" "$(REG_APP_DESC)" - WriteRegStr ${RegKey} "$0\Capabilities" "ApplicationIcon" "$8,0" - WriteRegStr ${RegKey} "$0\Capabilities" "ApplicationName" "${BrandShortName}" - - WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".htm" "BasiliskHTML" - WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".html" "BasiliskHTML" - WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".shtml" "BasiliskHTML" - WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".xht" "BasiliskHTML" - WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".xhtml" "BasiliskHTML" - - WriteRegStr ${RegKey} "$0\Capabilities\StartMenu" "StartMenuInternet" "$R9" - - WriteRegStr ${RegKey} "$0\Capabilities\URLAssociations" "ftp" "BasiliskURL" - WriteRegStr ${RegKey} "$0\Capabilities\URLAssociations" "http" "BasiliskURL" - WriteRegStr ${RegKey} "$0\Capabilities\URLAssociations" "https" "BasiliskURL" - - ; Vista Registered Application - WriteRegStr ${RegKey} "Software\RegisteredApplications" "${AppRegName}" "$0\Capabilities" -!macroend -!define SetStartMenuInternet "!insertmacro SetStartMenuInternet" - -; The IconHandler reference for BasiliskHTML can end up in an inconsistent state -; due to changes not being detected by the IconHandler for side by side -; installs (see bug 268512). The symptoms can be either an incorrect icon or no -; icon being displayed for files associated with Basilisk (does not use SHCTX). -!macro FixShellIconHandler RegKey - ClearErrors - ReadRegStr $1 ${RegKey} "Software\Classes\BasiliskHTML\ShellEx\IconHandler" "" - ${Unless} ${Errors} - ReadRegStr $1 ${RegKey} "Software\Classes\BasiliskHTML\DefaultIcon" "" - ${GetLongPath} "$INSTDIR\${FileMainEXE}" $2 - ${If} "$1" != "$2,1" - WriteRegStr ${RegKey} "Software\Classes\BasiliskHTML\DefaultIcon" "" "$2,1" - ${EndIf} - ${EndUnless} -!macroend -!define FixShellIconHandler "!insertmacro FixShellIconHandler" - -; Add Software\Mozilla\ registry entries (uses SHCTX). -!macro SetAppKeys - ; Check if this is an ESR release and if so add registry values so it is - ; possible to determine that this is an ESR install (bug 726781). - ClearErrors - ${WordFind} "${UpdateChannel}" "esr" "E#" $3 - ${If} ${Errors} - StrCpy $3 "" - ${Else} - StrCpy $3 " ESR" - ${EndIf} - - ${GetLongPath} "$INSTDIR" $8 - StrCpy $0 "Software\Mozilla\${BrandFullNameInternal}\${AppVersion}$3 (${ARCH} ${AB_CD})\Main" - ${WriteRegStr2} $TmpVal "$0" "Install Directory" "$8" 0 - ${WriteRegStr2} $TmpVal "$0" "PathToExe" "$8\${FileMainEXE}" 0 - - StrCpy $0 "Software\Mozilla\${BrandFullNameInternal}\${AppVersion}$3 (${ARCH} ${AB_CD})\Uninstall" - ${WriteRegStr2} $TmpVal "$0" "Description" "${BrandFullNameInternal} ${AppVersion}$3 (${ARCH} ${AB_CD})" 0 - - StrCpy $0 "Software\Mozilla\${BrandFullNameInternal}\${AppVersion}$3 (${ARCH} ${AB_CD})" - ${WriteRegStr2} $TmpVal "$0" "" "${AppVersion}$3 (${ARCH} ${AB_CD})" 0 - ${If} "$3" == "" - DeleteRegValue SHCTX "$0" "ESR" - ${Else} - ${WriteRegDWORD2} $TmpVal "$0" "ESR" 1 0 - ${EndIf} - - StrCpy $0 "Software\Mozilla\${BrandFullNameInternal} ${AppVersion}$3\bin" - ${WriteRegStr2} $TmpVal "$0" "PathToExe" "$8\${FileMainEXE}" 0 - - StrCpy $0 "Software\Mozilla\${BrandFullNameInternal} ${AppVersion}$3\extensions" - ${WriteRegStr2} $TmpVal "$0" "Components" "$8\components" 0 - ${WriteRegStr2} $TmpVal "$0" "Plugins" "$8\plugins" 0 - - StrCpy $0 "Software\Mozilla\${BrandFullNameInternal} ${AppVersion}$3" - ${WriteRegStr2} $TmpVal "$0" "GoannaVer" "${GREVersion}" 0 - ${If} "$3" == "" - DeleteRegValue SHCTX "$0" "ESR" - ${Else} - ${WriteRegDWORD2} $TmpVal "$0" "ESR" 1 0 - ${EndIf} - - StrCpy $0 "Software\Mozilla\${BrandFullNameInternal}$3" - ${WriteRegStr2} $TmpVal "$0" "" "${GREVersion}" 0 - ${WriteRegStr2} $TmpVal "$0" "CurrentVersion" "${AppVersion}$3 (${ARCH} ${AB_CD})" 0 -!macroend -!define SetAppKeys "!insertmacro SetAppKeys" - -; Add uninstall registry entries. This macro tests for write access to determine -; if the uninstall keys should be added to HKLM or HKCU. -!macro SetUninstallKeys - ; Check if this is an ESR release and if so add registry values so it is - ; possible to determine that this is an ESR install (bug 726781). - ClearErrors - ${WordFind} "${UpdateChannel}" "esr" "E#" $3 - ${If} ${Errors} - StrCpy $3 "" - ${Else} - StrCpy $3 " ESR" - ${EndIf} - - StrCpy $0 "Software\Microsoft\Windows\CurrentVersion\Uninstall\${BrandFullNameInternal} ${AppVersion}$3 (${ARCH} ${AB_CD})" - - StrCpy $2 "" - ClearErrors - WriteRegStr HKLM "$0" "${BrandShortName}InstallerTest" "Write Test" - ${If} ${Errors} - ; If the uninstall keys already exist in HKLM don't create them in HKCU - ClearErrors - ReadRegStr $2 "HKLM" $0 "DisplayName" - ${If} $2 == "" - ; Otherwise we don't have any keys for this product in HKLM so proceeed - ; to create them in HKCU. Better handling for this will be done in: - ; Bug 711044 - Better handling for 2 uninstall icons - StrCpy $1 "HKCU" - SetShellVarContext current ; Set SHCTX to the current user (e.g. HKCU) - ${EndIf} - ClearErrors - ${Else} - StrCpy $1 "HKLM" - SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM) - DeleteRegValue HKLM "$0" "${BrandShortName}InstallerTest" - ${EndIf} - - ${If} $2 == "" - ${GetLongPath} "$INSTDIR" $8 - - ; Write the uninstall registry keys - ${WriteRegStr2} $1 "$0" "Comments" "${BrandFullNameInternal} ${AppVersion}$3 (${ARCH} ${AB_CD})" 0 - ${WriteRegStr2} $1 "$0" "DisplayIcon" "$8\${FileMainEXE},0" 0 - ${WriteRegStr2} $1 "$0" "DisplayName" "${BrandFullNameInternal} ${AppVersion}$3 (${ARCH} ${AB_CD})" 0 - ${WriteRegStr2} $1 "$0" "DisplayVersion" "${AppVersion}" 0 - ${WriteRegStr2} $1 "$0" "HelpLink" "${HelpLink}" 0 - ${WriteRegStr2} $1 "$0" "InstallLocation" "$8" 0 - ${WriteRegStr2} $1 "$0" "Publisher" "Mozilla" 0 - ${WriteRegStr2} $1 "$0" "UninstallString" "$\"$8\uninstall\helper.exe$\"" 0 - DeleteRegValue SHCTX "$0" "URLInfoAbout" -; Don't add URLUpdateInfo which is the release notes url except for the release -; and esr channels since nightly, aurora, and beta do not have release notes. -; Note: URLUpdateInfo is only defined in the official branding.nsi. -!ifdef URLUpdateInfo -!ifndef BETA_UPDATE_CHANNEL - ${WriteRegStr2} $1 "$0" "URLUpdateInfo" "${URLUpdateInfo}" 0 -!endif -!endif - ${WriteRegStr2} $1 "$0" "URLInfoAbout" "${URLInfoAbout}" 0 - ${WriteRegDWORD2} $1 "$0" "NoModify" 1 0 - ${WriteRegDWORD2} $1 "$0" "NoRepair" 1 0 - - ${GetSize} "$8" "/S=0K" $R2 $R3 $R4 - ${WriteRegDWORD2} $1 "$0" "EstimatedSize" $R2 0 - - ${If} "$TmpVal" == "HKLM" - SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM) - ${Else} - SetShellVarContext current ; Set SHCTX to the current user (e.g. HKCU) - ${EndIf} - ${EndIf} -!macroend -!define SetUninstallKeys "!insertmacro SetUninstallKeys" - -; Due to a bug when associating some file handlers, only SHCTX was checked for -; some file types such as ".pdf". SHCTX is set to HKCU or HKLM depending on -; whether the installer has write access to HKLM. The bug would happen when -; HCKU was checked and didn't exist since programs aren't required to set the -; HKCU Software\Classes keys when associating handlers. The fix uses the merged -; view in HKCR to check for existance of an existing association. This macro -; cleans affected installations by removing the HKLM and HKCU value if it is set -; to BasiliskHTML when there is a value for PersistentHandler or by removing the -; HKCU value when the HKLM value has a value other than an empty string. -!macro FixBadFileAssociation FILE_TYPE - ; Only delete the default value in case the key has values for OpenWithList, - ; OpenWithProgids, PersistentHandler, etc. - ReadRegStr $0 HKCU "Software\Classes\${FILE_TYPE}" "" - ReadRegStr $1 HKLM "Software\Classes\${FILE_TYPE}" "" - ReadRegStr $2 HKCR "${FILE_TYPE}\PersistentHandler" "" - ${If} "$2" != "" - ; Since there is a persistent handler remove BasiliskHTML as the default - ; value from both HKCU and HKLM if it set to BasiliskHTML. - ${If} "$0" == "BasiliskHTML" - DeleteRegValue HKCU "Software\Classes\${FILE_TYPE}" "" - ${EndIf} - ${If} "$1" == "BasiliskHTML" - DeleteRegValue HKLM "Software\Classes\${FILE_TYPE}" "" - ${EndIf} - ${ElseIf} "$0" == "BasiliskHTML" - ; Since KHCU is set to BasiliskHTML remove BasiliskHTML as the default value - ; from HKCU if HKLM is set to a value other than an empty string. - ${If} "$1" != "" - DeleteRegValue HKCU "Software\Classes\${FILE_TYPE}" "" - ${EndIf} - ${EndIf} -!macroend -!define FixBadFileAssociation "!insertmacro FixBadFileAssociation" - -; Add app specific handler registry entries under Software\Classes if they -; don't exist (does not use SHCTX). -!macro FixClassKeys - StrCpy $1 "SOFTWARE\Classes" - - ; File handler keys and name value pairs that may need to be created during - ; install or upgrade. - ReadRegStr $0 HKCR ".shtml" "Content Type" - ${If} "$0" == "" - StrCpy $0 "$1\.shtml" - ${WriteRegStr2} $TmpVal "$1\.shtml" "" "shtmlfile" 0 - ${WriteRegStr2} $TmpVal "$1\.shtml" "Content Type" "text/html" 0 - ${WriteRegStr2} $TmpVal "$1\.shtml" "PerceivedType" "text" 0 - ${EndIf} - - ReadRegStr $0 HKCR ".xht" "Content Type" - ${If} "$0" == "" - ${WriteRegStr2} $TmpVal "$1\.xht" "" "xhtfile" 0 - ${WriteRegStr2} $TmpVal "$1\.xht" "Content Type" "application/xhtml+xml" 0 - ${EndIf} - - ReadRegStr $0 HKCR ".xhtml" "Content Type" - ${If} "$0" == "" - ${WriteRegStr2} $TmpVal "$1\.xhtml" "" "xhtmlfile" 0 - ${WriteRegStr2} $TmpVal "$1\.xhtml" "Content Type" "application/xhtml+xml" 0 - ${EndIf} - - ; Remove possibly badly associated file types - ${FixBadFileAssociation} ".pdf" - ${FixBadFileAssociation} ".oga" - ${FixBadFileAssociation} ".ogg" - ${FixBadFileAssociation} ".ogv" - ${FixBadFileAssociation} ".pdf" - ${FixBadFileAssociation} ".webm" -!macroend -!define FixClassKeys "!insertmacro FixClassKeys" - -; Updates protocol handlers if their registry open command value is for this -; install location (uses SHCTX). -!macro UpdateProtocolHandlers - ; Store the command to open the app with an url in a register for easy access. - ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8 - StrCpy $2 "$\"$8$\" -osint -url $\"%1$\"" - - ; Only set the file and protocol handlers if the existing one under HKCR is - ; for this install location. - - ${IsHandlerForInstallDir} "BasiliskHTML" $R9 - ${If} "$R9" == "true" - ; An empty string is used for the 5th param because BasiliskHTML is not a - ; protocol handler. - ${AddDisabledDDEHandlerValues} "BasiliskHTML" "$2" "$8,1" \ - "${AppRegName} HTML Document" "" - ${EndIf} - - ${IsHandlerForInstallDir} "BasiliskURL" $R9 - ${If} "$R9" == "true" - ${AddDisabledDDEHandlerValues} "BasiliskURL" "$2" "$8,1" \ - "${AppRegName} URL" "true" - ${EndIf} - - ; An empty string is used for the 4th & 5th params because the following - ; protocol handlers already have a display name and the additional keys - ; required for a protocol handler. - ${IsHandlerForInstallDir} "ftp" $R9 - ${If} "$R9" == "true" - ${AddDisabledDDEHandlerValues} "ftp" "$2" "$8,1" "" "" - ${EndIf} - - ${IsHandlerForInstallDir} "http" $R9 - ${If} "$R9" == "true" - ${AddDisabledDDEHandlerValues} "http" "$2" "$8,1" "" "" - ${EndIf} - - ${IsHandlerForInstallDir} "https" $R9 - ${If} "$R9" == "true" - ${AddDisabledDDEHandlerValues} "https" "$2" "$8,1" "" "" - ${EndIf} -!macroend -!define UpdateProtocolHandlers "!insertmacro UpdateProtocolHandlers" - -!ifdef MOZ_MAINTENANCE_SERVICE -; Adds maintenance service certificate keys for the install dir. -; For the cert to work, it must also be signed by a trusted cert for the user. -!macro AddMaintCertKeys - Push $R0 - ; Allow main Mozilla cert information for updates - ; This call will push the needed key on the stack - ServicesHelper::PathToUniqueRegistryPath "$INSTDIR" - Pop $R0 - ${If} $R0 != "" - ; More than one certificate can be specified in a different subfolder - ; for example: $R0\1, but each individual binary can be signed - ; with at most one certificate. A fallback certificate can only be used - ; if the binary is replaced with a different certificate. - ; We always use the 64bit registry for certs. - ${If} ${RunningX64} - SetRegView 64 - ${EndIf} - - ; PrefetchProcessName was originally used to experiment with deleting - ; Windows prefetch as a speed optimization. It is no longer used though. - DeleteRegValue HKLM "$R0" "prefetchProcessName" - - ; Setting the Attempted value will ensure that a new Maintenance Service - ; install will never be attempted again after this from updates. The value - ; is used only to see if updates should attempt new service installs. - WriteRegDWORD HKLM "Software\Mozilla\MaintenanceService" "Attempted" 1 - - ; These values associate the allowed certificates for the current - ; installation. - WriteRegStr HKLM "$R0\0" "name" "${CERTIFICATE_NAME}" - WriteRegStr HKLM "$R0\0" "issuer" "${CERTIFICATE_ISSUER}" - ; These values associate the allowed certificates for the previous - ; installation, so that we can update from it cleanly using the - ; old updater.exe (which will still have this signature). - WriteRegStr HKLM "$R0\1" "name" "${CERTIFICATE_NAME_PREVIOUS}" - WriteRegStr HKLM "$R0\1" "issuer" "${CERTIFICATE_ISSUER_PREVIOUS}" - ${If} ${RunningX64} - SetRegView lastused - ${EndIf} - ClearErrors - ${EndIf} - ; Restore the previously used value back - Pop $R0 -!macroend -!define AddMaintCertKeys "!insertmacro AddMaintCertKeys" -!endif - -; Removes various registry entries for reasons noted below (does not use SHCTX). -!macro RemoveDeprecatedKeys - StrCpy $0 "SOFTWARE\Classes" - ; Remove support for launching gopher urls from the shell during install or - ; update if the DefaultIcon is from firefox.exe. - ${RegCleanAppHandler} "gopher" - - ; Remove support for launching chrome urls from the shell during install or - ; update if the DefaultIcon is from firefox.exe (Bug 301073). - ${RegCleanAppHandler} "chrome" - - ; Remove protocol handler registry keys added by the MS shim - DeleteRegKey HKLM "Software\Classes\Basilisk.URL" - DeleteRegKey HKCU "Software\Classes\Basilisk.URL" - - ; Delete gopher from Capabilities\URLAssociations if it is present. - ${StrFilter} "${FileMainEXE}" "+" "" "" $R9 - StrCpy $0 "Software\Clients\StartMenuInternet\$R9" - ClearErrors - ReadRegStr $2 HKLM "$0\Capabilities\URLAssociations" "gopher" - ${Unless} ${Errors} - DeleteRegValue HKLM "$0\Capabilities\URLAssociations" "gopher" - ${EndUnless} - - ; Delete gopher from the user's UrlAssociations if it points to BasiliskURL. - StrCpy $0 "Software\Microsoft\Windows\Shell\Associations\UrlAssociations\gopher" - ReadRegStr $2 HKCU "$0\UserChoice" "Progid" - ${If} "$2" == "BasiliskURL" - DeleteRegKey HKCU "$0" - ${EndIf} -!macroend -!define RemoveDeprecatedKeys "!insertmacro RemoveDeprecatedKeys" - -; Removes various directories and files for reasons noted below. -!macro RemoveDeprecatedFiles - ; Remove talkback if it is present (remove after bug 386760 is fixed) - ${If} ${FileExists} "$INSTDIR\extensions\talkback@mozilla.org" - RmDir /r /REBOOTOK "$INSTDIR\extensions\talkback@mozilla.org" - ${EndIf} - - ; Remove the Java Console extension (bug 1165156) - ${If} ${FileExists} "$INSTDIR\extensions\{CAFEEFAC-0016-0000-0031-ABCDEFFEDCBA}" - RmDir /r /REBOOTOK "$INSTDIR\extensions\{CAFEEFAC-0016-0000-0031-ABCDEFFEDCBA}" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\extensions\{CAFEEFAC-0016-0000-0034-ABCDEFFEDCBA}" - RmDir /r /REBOOTOK "$INSTDIR\extensions\{CAFEEFAC-0016-0000-0034-ABCDEFFEDCBA}" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\extensions\{CAFEEFAC-0016-0000-0039-ABCDEFFEDCBA}" - RmDir /r /REBOOTOK "$INSTDIR\extensions\{CAFEEFAC-0016-0000-0039-ABCDEFFEDCBA}" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\extensions\{CAFEEFAC-0016-0000-0045-ABCDEFFEDCBA}" - RmDir /r /REBOOTOK "$INSTDIR\extensions\{CAFEEFAC-0016-0000-0045-ABCDEFFEDCBA}" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\extensions\{CAFEEFAC-0017-0000-0000-ABCDEFFEDCBA}" - RmDir /r /REBOOTOK "$INSTDIR\extensions\{CAFEEFAC-0017-0000-0000-ABCDEFFEDCBA}" - ${EndIf} -!macroend -!define RemoveDeprecatedFiles "!insertmacro RemoveDeprecatedFiles" - -; Converts specific partner distribution.ini from ansi to utf-8 (bug 882989) -!macro FixDistributionsINI - StrCpy $1 "$INSTDIR\distribution\distribution.ini" - StrCpy $2 "$INSTDIR\distribution\utf8fix" - StrCpy $0 "0" ; Default to not attempting to fix - - ; Check if the distribution.ini settings are for a partner build that needs - ; to have its distribution.ini converted from ansi to utf-8. - ${If} ${FileExists} "$1" - ${Unless} ${FileExists} "$2" - ReadINIStr $3 "$1" "Preferences" "app.distributor" - ${If} "$3" == "yahoo" - ReadINIStr $3 "$1" "Preferences" "app.distributor.channel" - ${If} "$3" == "de" - ${OrIf} "$3" == "es" - ${OrIf} "$3" == "e1" - ${OrIf} "$3" == "mx" - StrCpy $0 "1" - ${EndIf} - ${EndIf} - ; Create the utf8fix so this only runs once - FileOpen $3 "$2" w - FileClose $3 - ${EndUnless} - ${EndIf} - - ${If} "$0" == "1" - StrCpy $0 "0" - ClearErrors - ReadINIStr $3 "$1" "Global" "version" - ${Unless} ${Errors} - StrCpy $4 "$3" 2 - ${If} "$4" == "1." - StrCpy $4 "$3" "" 2 ; Everything after "1." - ${If} $4 < 23 - StrCpy $0 "1" - ${EndIf} - ${EndIf} - ${EndUnless} - ${EndIf} - - ${If} "$0" == "1" - ClearErrors - FileOpen $3 "$1" r - ${If} ${Errors} - FileClose $3 - ${Else} - StrCpy $2 "$INSTDIR\distribution\distribution.new" - ClearErrors - FileOpen $4 "$2" w - ${If} ${Errors} - FileClose $3 - FileClose $4 - ${Else} - StrCpy $0 "0" ; Default to not replacing the original distribution.ini - ${Do} - FileReadByte $3 $5 - ${If} $5 == "" - ${Break} - ${EndIf} - ${If} $5 == 233 ; ansi é - StrCpy $0 "1" - FileWriteByte $4 195 - FileWriteByte $4 169 - ${ElseIf} $5 == 241 ; ansi ñ - StrCpy $0 "1" - FileWriteByte $4 195 - FileWriteByte $4 177 - ${ElseIf} $5 == 252 ; ansi ü - StrCpy $0 "1" - FileWriteByte $4 195 - FileWriteByte $4 188 - ${ElseIf} $5 < 128 - FileWriteByte $4 $5 - ${EndIf} - ${Loop} - FileClose $3 - FileClose $4 - ${If} "$0" == "1" - ClearErrors - Rename "$1" "$1.bak" - ${Unless} ${Errors} - Rename "$2" "$1" - Delete "$1.bak" - ${EndUnless} - ${Else} - Delete "$2" - ${EndIf} - ${EndIf} - ${EndIf} - ${EndIf} -!macroend -!define FixDistributionsINI "!insertmacro FixDistributionsINI" - -; Adds a pinned shortcut to Task Bar on update for Windows 7 and above if this -; macro has never been called before and the application is default (see -; PinToTaskBar for more details). -; Since defaults handling is handled by Windows in Win8 and later, we always -; attempt to pin a taskbar on that OS. If Windows sets the defaults at -; installation time, then we don't get the opportunity to run this code at -; that time. -!macro MigrateTaskBarShortcut - ${GetShortcutsLogPath} $0 - ${If} ${FileExists} "$0" - ClearErrors - ReadINIStr $1 "$0" "TASKBAR" "Migrated" - ${If} ${Errors} - ClearErrors - WriteIniStr "$0" "TASKBAR" "Migrated" "true" - ${If} ${AtLeastWin7} - ; If we didn't run the stub installer, AddTaskbarSC will be empty. - ; We determine whether to pin based on whether we're the default - ; browser, or if we're on win8 or later, we always pin. - ${If} $AddTaskbarSC == "" - ; No need to check the default on Win8 and later - ${If} ${AtMostWin2008R2} - ; Check if the Basilisk is the http handler for this user - SetShellVarContext current ; Set SHCTX to the current user - ${IsHandlerForInstallDir} "http" $R9 - ${If} $TmpVal == "HKLM" - SetShellVarContext all ; Set SHCTX to all users - ${EndIf} - ${EndIf} - ${If} "$R9" == "true" - ${OrIf} ${AtLeastWin8} - ${PinToTaskBar} - ${EndIf} - ${ElseIf} $AddTaskbarSC == "1" - ${PinToTaskBar} - ${EndIf} - ${EndIf} - ${EndIf} - ${EndIf} -!macroend -!define MigrateTaskBarShortcut "!insertmacro MigrateTaskBarShortcut" - -; Adds a pinned Task Bar shortcut on Windows 7 if there isn't one for the main -; application executable already. Existing pinned shortcuts for the same -; application model ID must be removed first to prevent breaking the pinned -; item's lists but multiple installations with the same application model ID is -; an edgecase. If removing existing pinned shortcuts with the same application -; model ID removes a pinned pinned Start Menu shortcut this will also add a -; pinned Start Menu shortcut. -!macro PinToTaskBar - ${If} ${AtLeastWin7} - StrCpy $8 "false" ; Whether a shortcut had to be created - ${IsPinnedToTaskBar} "$INSTDIR\${FileMainEXE}" $R9 - ${If} "$R9" == "false" - ; Find an existing Start Menu shortcut or create one to use for pinning - ${GetShortcutsLogPath} $0 - ${If} ${FileExists} "$0" - ClearErrors - ReadINIStr $1 "$0" "STARTMENU" "Shortcut0" - ${Unless} ${Errors} - SetShellVarContext all ; Set SHCTX to all users - ${Unless} ${FileExists} "$SMPROGRAMS\$1" - SetShellVarContext current ; Set SHCTX to the current user - ${Unless} ${FileExists} "$SMPROGRAMS\$1" - StrCpy $8 "true" - CreateShortCut "$SMPROGRAMS\$1" "$INSTDIR\${FileMainEXE}" - ${If} ${FileExists} "$SMPROGRAMS\$1" - ShellLink::SetShortCutWorkingDirectory "$SMPROGRAMS\$1" \ - "$INSTDIR" - ${If} "$AppUserModelID" != "" - ApplicationID::Set "$SMPROGRAMS\$1" "$AppUserModelID" "true" - ${EndIf} - ${EndIf} - ${EndUnless} - ${EndUnless} - - ${If} ${FileExists} "$SMPROGRAMS\$1" - ; Count of Start Menu pinned shortcuts before unpinning. - ${PinnedToStartMenuLnkCount} $R9 - - ; Having multiple shortcuts pointing to different installations with - ; the same AppUserModelID (e.g. side by side installations of the - ; same version) will make the TaskBar shortcut's lists into an bad - ; state where the lists are not shown. To prevent this first - ; uninstall the pinned item. - ApplicationID::UninstallPinnedItem "$SMPROGRAMS\$1" - - ; Count of Start Menu pinned shortcuts after unpinning. - ${PinnedToStartMenuLnkCount} $R8 - - ; If there is a change in the number of Start Menu pinned shortcuts - ; assume that unpinning unpinned a side by side installation from - ; the Start Menu and pin this installation to the Start Menu. - ${Unless} $R8 == $R9 - ; Pin the shortcut to the Start Menu. 5381 is the shell32.dll - ; resource id for the "Pin to Start Menu" string. - InvokeShellVerb::DoIt "$SMPROGRAMS" "$1" "5381" - ${EndUnless} - - ; Pin the shortcut to the TaskBar. 5386 is the shell32.dll resource - ; id for the "Pin to Taskbar" string. - InvokeShellVerb::DoIt "$SMPROGRAMS" "$1" "5386" - - ; Delete the shortcut if it was created - ${If} "$8" == "true" - Delete "$SMPROGRAMS\$1" - ${EndIf} - ${EndIf} - - ${If} $TmpVal == "HKCU" - SetShellVarContext current ; Set SHCTX to the current user - ${Else} - SetShellVarContext all ; Set SHCTX to all users - ${EndIf} - ${EndUnless} - ${EndIf} - ${EndIf} - ${EndIf} -!macroend -!define PinToTaskBar "!insertmacro PinToTaskBar" - -; Adds a shortcut to the root of the Start Menu Programs directory if the -; application's Start Menu Programs directory exists with a shortcut pointing to -; this installation directory. This will also remove the old shortcuts and the -; application's Start Menu Programs directory by calling the RemoveStartMenuDir -; macro. -!macro MigrateStartMenuShortcut - ${GetShortcutsLogPath} $0 - ${If} ${FileExists} "$0" - ClearErrors - ReadINIStr $5 "$0" "SMPROGRAMS" "RelativePathToDir" - ${Unless} ${Errors} - ClearErrors - ReadINIStr $1 "$0" "STARTMENU" "Shortcut0" - ${If} ${Errors} - ; The STARTMENU ini section doesn't exist. - ${LogStartMenuShortcut} "${BrandFullName}.lnk" - ${GetLongPath} "$SMPROGRAMS" $2 - ${GetLongPath} "$2\$5" $1 - ${If} "$1" != "" - ClearErrors - ReadINIStr $3 "$0" "SMPROGRAMS" "Shortcut0" - ${Unless} ${Errors} - ${If} ${FileExists} "$1\$3" - ShellLink::GetShortCutTarget "$1\$3" - Pop $4 - ${If} "$INSTDIR\${FileMainEXE}" == "$4" - CreateShortCut "$SMPROGRAMS\${BrandFullName}.lnk" \ - "$INSTDIR\${FileMainEXE}" - ${If} ${FileExists} "$SMPROGRAMS\${BrandFullName}.lnk" - ShellLink::SetShortCutWorkingDirectory "$SMPROGRAMS\${BrandFullName}.lnk" \ - "$INSTDIR" - ${If} ${AtLeastWin7} - ${AndIf} "$AppUserModelID" != "" - ApplicationID::Set "$SMPROGRAMS\${BrandFullName}.lnk" \ - "$AppUserModelID" "true" - ${EndIf} - ${EndIf} - ${EndIf} - ${EndIf} - ${EndUnless} - ${EndIf} - ${EndIf} - ; Remove the application's Start Menu Programs directory, shortcuts, and - ; ini section. - ${RemoveStartMenuDir} - ${EndUnless} - ${EndIf} -!macroend -!define MigrateStartMenuShortcut "!insertmacro MigrateStartMenuShortcut" - -; Removes the application's start menu directory along with its shortcuts if -; they exist and if they exist creates a start menu shortcut in the root of the -; start menu directory (bug 598779). If the application's start menu directory -; is not empty after removing the shortucts the directory will not be removed -; since these additional items were not created by the installer (uses SHCTX). -!macro RemoveStartMenuDir - ${GetShortcutsLogPath} $0 - ${If} ${FileExists} "$0" - ; Delete Start Menu Programs shortcuts, directory if it is empty, and - ; parent directories if they are empty up to but not including the start - ; menu directory. - ${GetLongPath} "$SMPROGRAMS" $1 - ClearErrors - ReadINIStr $2 "$0" "SMPROGRAMS" "RelativePathToDir" - ${Unless} ${Errors} - ${GetLongPath} "$1\$2" $2 - ${If} "$2" != "" - ; Delete shortucts in the Start Menu Programs directory. - StrCpy $3 0 - ${Do} - ClearErrors - ReadINIStr $4 "$0" "SMPROGRAMS" "Shortcut$3" - ; Stop if there are no more entries - ${If} ${Errors} - ${ExitDo} - ${EndIf} - ${If} ${FileExists} "$2\$4" - ShellLink::GetShortCutTarget "$2\$4" - Pop $5 - ${If} "$INSTDIR\${FileMainEXE}" == "$5" - Delete "$2\$4" - ${EndIf} - ${EndIf} - IntOp $3 $3 + 1 ; Increment the counter - ${Loop} - ; Delete Start Menu Programs directory and parent directories - ${Do} - ; Stop if the current directory is the start menu directory - ${If} "$1" == "$2" - ${ExitDo} - ${EndIf} - ClearErrors - RmDir "$2" - ; Stop if removing the directory failed - ${If} ${Errors} - ${ExitDo} - ${EndIf} - ${GetParent} "$2" $2 - ${Loop} - ${EndIf} - DeleteINISec "$0" "SMPROGRAMS" - ${EndUnless} - ${EndIf} -!macroend -!define RemoveStartMenuDir "!insertmacro RemoveStartMenuDir" - -; Creates the shortcuts log ini file with the appropriate entries if it doesn't -; already exist. -!macro CreateShortcutsLog - ${GetShortcutsLogPath} $0 - ${Unless} ${FileExists} "$0" - ${LogStartMenuShortcut} "${BrandFullName}.lnk" - ${LogQuickLaunchShortcut} "${BrandFullName}.lnk" - ${LogDesktopShortcut} "${BrandFullName}.lnk" - ${EndUnless} -!macroend -!define CreateShortcutsLog "!insertmacro CreateShortcutsLog" - -; The files to check if they are in use during (un)install so the restart is -; required message is displayed. All files must be located in the $INSTDIR -; directory. -!macro PushFilesToCheck - ; The first string to be pushed onto the stack MUST be "end" to indicate - ; that there are no more files to check in $INSTDIR and the last string - ; should be ${FileMainEXE} so if it is in use the CheckForFilesInUse macro - ; returns after the first check. - Push "end" - Push "AccessibleMarshal.dll" - Push "IA2Marshal.dll" - Push "freebl3.dll" - Push "nssckbi.dll" - Push "nspr4.dll" - Push "nssdbm3.dll" - Push "mozsqlite3.dll" - Push "xpcom.dll" - Push "crashreporter.exe" - Push "minidump-analyzer.exe" - Push "updater.exe" - Push "${FileMainEXE}" -!macroend -!define PushFilesToCheck "!insertmacro PushFilesToCheck" - - -; Pushes the string "true" to the top of the stack if the Firewall service is -; running and pushes the string "false" to the top of the stack if it isn't. -!define SC_MANAGER_ALL_ACCESS 0x3F -!define SERVICE_QUERY_CONFIG 0x0001 -!define SERVICE_QUERY_STATUS 0x0004 -!define SERVICE_RUNNING 0x4 - -!macro IsFirewallSvcRunning - Push $R9 - Push $R8 - Push $R7 - Push $R6 - Push "false" - - System::Call 'advapi32::OpenSCManagerW(n, n, i ${SC_MANAGER_ALL_ACCESS}) i.R6' - ${If} $R6 != 0 - ; MpsSvc is the Firewall service on Windows Vista and above. - ; When opening the service with SERVICE_QUERY_CONFIG the return value will - ; be 0 if the service is not installed. - System::Call 'advapi32::OpenServiceW(i R6, t "MpsSvc", i ${SERVICE_QUERY_CONFIG}) i.R7' - ${If} $R7 != 0 - System::Call 'advapi32::CloseServiceHandle(i R7) n' - ; Open the service with SERVICE_QUERY_CONFIG so its status can be queried. - System::Call 'advapi32::OpenServiceW(i R6, t "MpsSvc", i ${SERVICE_QUERY_STATUS}) i.R7' - ${Else} - ; SharedAccess is the Firewall service on Windows XP. - ; When opening the service with SERVICE_QUERY_CONFIG the return value will - ; be 0 if the service is not installed. - System::Call 'advapi32::OpenServiceW(i R6, t "SharedAccess", i ${SERVICE_QUERY_CONFIG}) i.R7' - ${If} $R7 != 0 - System::Call 'advapi32::CloseServiceHandle(i R7) n' - ; Open the service with SERVICE_QUERY_CONFIG so its status can be - ; queried. - System::Call 'advapi32::OpenServiceW(i R6, t "SharedAccess", i ${SERVICE_QUERY_STATUS}) i.R7' - ${EndIf} - ${EndIf} - ; Did the calls to OpenServiceW succeed? - ${If} $R7 != 0 - System::Call '*(i,i,i,i,i,i,i) i.R9' - ; Query the current status of the service. - System::Call 'advapi32::QueryServiceStatus(i R7, i $R9) i' - System::Call '*$R9(i, i.R8)' - System::Free $R9 - System::Call 'advapi32::CloseServiceHandle(i R7) n' - IntFmt $R8 "0x%X" $R8 - ${If} $R8 == ${SERVICE_RUNNING} - Pop $R9 - Push "true" - ${EndIf} - ${EndIf} - System::Call 'advapi32::CloseServiceHandle(i R6) n' - ${EndIf} - - Exch 1 - Pop $R6 - Exch 1 - Pop $R7 - Exch 1 - Pop $R8 - Exch 1 - Pop $R9 -!macroend -!define IsFirewallSvcRunning "!insertmacro IsFirewallSvcRunning" -!define un.IsFirewallSvcRunning "!insertmacro IsFirewallSvcRunning" - -; Sets this installation as the default browser by setting the registry keys -; under HKEY_CURRENT_USER via registry calls and using the AppAssocReg NSIS -; plugin for Vista and above. This is a function instead of a macro so it is -; easily called from an elevated instance of the binary. Since this can be -; called by an elevated instance logging is not performed in this function. -Function SetAsDefaultAppUserHKCU - ; Only set as the user's StartMenuInternet browser if the StartMenuInternet - ; registry keys are for this install. - ${StrFilter} "${FileMainEXE}" "+" "" "" $R9 - ClearErrors - ReadRegStr $0 HKCU "Software\Clients\StartMenuInternet\$R9\DefaultIcon" "" - ${If} ${Errors} - ${OrIf} ${AtMostWin2008R2} - ClearErrors - ReadRegStr $0 HKLM "Software\Clients\StartMenuInternet\$R9\DefaultIcon" "" - ${EndIf} - ${Unless} ${Errors} - ${GetPathFromString} "$0" $0 - ${GetParent} "$0" $0 - ${If} ${FileExists} "$0" - ${GetLongPath} "$0" $0 - ${If} "$0" == "$INSTDIR" - WriteRegStr HKCU "Software\Clients\StartMenuInternet" "" "$R9" - ${EndIf} - ${EndIf} - ${EndUnless} - - SetShellVarContext current ; Set SHCTX to the current user (e.g. HKCU) - - ${If} ${AtLeastWin8} - ${SetStartMenuInternet} "HKCU" - ${FixShellIconHandler} "HKCU" - ${FixClassKeys} ; Does not use SHCTX - ${EndIf} - - ${SetHandlers} - - ${If} ${AtLeastWinVista} - ; Only register as the handler on Vista and above if the app registry name - ; exists under the RegisteredApplications registry key. The protocol and - ; file handlers set previously at the user level will associate this install - ; as the default browser. - ClearErrors - ReadRegStr $0 HKLM "Software\RegisteredApplications" "${AppRegName}" - ${Unless} ${Errors} - ; This is all protected by a user choice hash in Windows 8 so it won't - ; help, but it also won't hurt. - AppAssocReg::SetAppAsDefaultAll "${AppRegName}" - ${EndUnless} - ${EndIf} - ${RemoveDeprecatedKeys} - ${MigrateTaskBarShortcut} -FunctionEnd - -; Helper for updating the shortcut application model IDs. -Function FixShortcutAppModelIDs - ${If} ${AtLeastWin7} - ${AndIf} "$AppUserModelID" != "" - ${UpdateShortcutAppModelIDs} "$INSTDIR\${FileMainEXE}" "$AppUserModelID" $0 - ${EndIf} -FunctionEnd - -; Helper for adding Firewall exceptions during install and after app update. -Function AddFirewallEntries - ${IsFirewallSvcRunning} - Pop $0 - ${If} "$0" == "true" - liteFirewallW::AddRule "$INSTDIR\${FileMainEXE}" "${BrandShortName} ($INSTDIR)" - ${EndIf} -FunctionEnd - -; The !ifdef NO_LOG prevents warnings when compiling the installer.nsi due to -; this function only being used by the uninstaller.nsi. -!ifdef NO_LOG - -Function SetAsDefaultAppUser - ; On Win8, we want to avoid having a UAC prompt since we'll already have - ; another action for control panel default browser selection popping up - ; to the user. Win8 is the first OS where the start menu keys can be - ; added into HKCU. The call to SetAsDefaultAppUserHKCU will have already - ; set the HKCU keys for SetStartMenuInternet. - ${If} ${AtLeastWin8} - ; Check if this is running in an elevated process - ClearErrors - ${GetParameters} $0 - ${GetOptions} "$0" "/UAC:" $0 - ${If} ${Errors} ; Not elevated - Call SetAsDefaultAppUserHKCU - ${Else} ; Elevated - execute the function in the unelevated process - GetFunctionAddress $0 SetAsDefaultAppUserHKCU - UAC::ExecCodeSegment $0 - ${EndIf} - Return ; Nothing more needs to be done - ${EndIf} - - ; Before Win8, it is only possible to set this installation of the application - ; as the StartMenuInternet handler if it was added to the HKLM - ; StartMenuInternet registry keys. - ; http://support.microsoft.com/kb/297878 - - ; Check if this install location registered as the StartMenuInternet client - ${StrFilter} "${FileMainEXE}" "+" "" "" $R9 - ClearErrors - ReadRegStr $0 HKCU "Software\Clients\StartMenuInternet\$R9\DefaultIcon" "" - ${If} ${Errors} - ${OrIf} ${AtMostWin2008R2} - ClearErrors - ReadRegStr $0 HKLM "Software\Clients\StartMenuInternet\$R9\DefaultIcon" "" - ${EndIf} - - ${Unless} ${Errors} - ${GetPathFromString} "$0" $0 - ${GetParent} "$0" $0 - ${If} ${FileExists} "$0" - ${GetLongPath} "$0" $0 - ${If} "$0" == "$INSTDIR" - ; Check if this is running in an elevated process - ClearErrors - ${GetParameters} $0 - ${GetOptions} "$0" "/UAC:" $0 - ${If} ${Errors} ; Not elevated - Call SetAsDefaultAppUserHKCU - ${Else} ; Elevated - execute the function in the unelevated process - GetFunctionAddress $0 SetAsDefaultAppUserHKCU - UAC::ExecCodeSegment $0 - ${EndIf} - Return ; Nothing more needs to be done - ${EndIf} - ${EndIf} - ${EndUnless} - - ; The code after ElevateUAC won't be executed on Vista and above when the - ; user: - ; a) is a member of the administrators group (e.g. elevation is required) - ; b) is not a member of the administrators group and chooses to elevate - ${ElevateUAC} - - ${SetStartMenuInternet} "HKLM" - - SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM) - - ${FixClassKeys} ; Does not use SHCTX - ${FixShellIconHandler} "HKLM" - ${RemoveDeprecatedKeys} ; Does not use SHCTX - - ClearErrors - ${GetParameters} $0 - ${GetOptions} "$0" "/UAC:" $0 - ${If} ${Errors} - Call SetAsDefaultAppUserHKCU - ${Else} - GetFunctionAddress $0 SetAsDefaultAppUserHKCU - UAC::ExecCodeSegment $0 - ${EndIf} -FunctionEnd -!define SetAsDefaultAppUser "Call SetAsDefaultAppUser" - -!endif ; NO_LOG diff --git a/application/basilisk/installer/windows/nsis/stub.nsi b/application/basilisk/installer/windows/nsis/stub.nsi deleted file mode 100644 index 999ffa154..000000000 --- a/application/basilisk/installer/windows/nsis/stub.nsi +++ /dev/null @@ -1,2199 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -# Required Plugins: -# AppAssocReg -# CertCheck -# InetBgDL -# ShellLink -# UAC - -; Set verbosity to 3 (e.g. no script) to lessen the noise in the build logs -!verbose 3 - -SetDatablockOptimize on -SetCompress off -CRCCheck on - -RequestExecutionLevel user - -; The commands inside this ifdef require NSIS 3.0a2 or greater so the ifdef can -; be removed after we require NSIS 3.0a2 or greater. -!ifdef NSIS_PACKEDVERSION - Unicode true - ManifestSupportedOS all - ManifestDPIAware true -!endif - -!addplugindir ./ - -Var Dialog -Var Progressbar -Var ProgressbarMarqueeIntervalMS -Var LabelDownloading -Var LabelInstalling -Var LabelFreeSpace -Var CheckboxSetAsDefault -Var CheckboxShortcuts -Var CheckboxSendPing -Var CheckboxInstallMaintSvc -Var DroplistArch -Var DirRequest -Var ButtonBrowse -Var LabelBlurb1 -Var LabelBlurb2 -Var LabelBlurb3 -Var BitmapBlurb1 -Var BitmapBlurb2 -Var BitmapBlurb3 -Var HwndBitmapBlurb1 -Var HwndBitmapBlurb2 -Var HWndBitmapBlurb3 - -Var FontNormal -Var FontItalic -Var FontBlurb - -Var WasOptionsButtonClicked -Var CanWriteToInstallDir -Var HasRequiredSpaceAvailable -Var IsDownloadFinished -Var DownloadSizeBytes -Var HalfOfDownload -Var DownloadReset -Var ExistingTopDir -Var SpaceAvailableBytes -Var InitialInstallDir -Var HandleDownload -Var CanSetAsDefault -Var InstallCounterStep -Var InstallStepSize -Var InstallTotalSteps -Var ProgressCompleted -Var ProgressTotal - -Var ExitCode -Var BasiliskLaunchCode - -; The first three tick counts are for the start of a phase and equate equate to -; the display of individual installer pages. -Var StartIntroPhaseTickCount -Var StartOptionsPhaseTickCount -Var StartDownloadPhaseTickCount -; Since the Intro and Options pages can be displayed multiple times the total -; seconds spent on each of these pages is reported. -Var IntroPhaseSeconds -Var OptionsPhaseSeconds -; The tick count for the last download. -Var StartLastDownloadTickCount -; The number of seconds from the start of the download phase until the first -; bytes are received. This is only recorded for first request so it is possible -; to determine connection issues for the first request. -Var DownloadFirstTransferSeconds -; The last four tick counts are for the end of a phase in the installation page. -Var EndDownloadPhaseTickCount -Var EndPreInstallPhaseTickCount -Var EndInstallPhaseTickCount -Var EndFinishPhaseTickCount - -Var InitialInstallRequirementsCode -Var ExistingProfile -Var ExistingVersion -Var ExistingBuildID -Var DownloadedBytes -Var DownloadRetryCount -Var OpenedDownloadPage -Var DownloadServerIP -Var PostSigningData -Var PreviousInstallDir -Var PreviousInstallArch - -Var ControlHeightPX -Var ControlRightPX -Var ControlTopAdjustment -Var OptionsItemWidthPX - -; Uncomment the following to prevent pinging the metrics server when testing -; the stub installer -;!define STUB_DEBUG - -!define StubURLVersion "v7" - -; Successful install exit code -!define ERR_SUCCESS 0 - -/** - * The following errors prefixed with ERR_DOWNLOAD apply to the download phase. - */ -; The download was cancelled by the user -!define ERR_DOWNLOAD_CANCEL 10 - -; Too many attempts to download. The maximum attempts is defined in -; DownloadMaxRetries. -!define ERR_DOWNLOAD_TOO_MANY_RETRIES 11 - -/** - * The following errors prefixed with ERR_PREINSTALL apply to the pre-install - * check phase. - */ -; Unable to acquire a file handle to the downloaded file -!define ERR_PREINSTALL_INVALID_HANDLE 20 - -; The downloaded file's certificate is not trusted by the certificate store. -!define ERR_PREINSTALL_CERT_UNTRUSTED 21 - -; The downloaded file's certificate attribute values were incorrect. -!define ERR_PREINSTALL_CERT_ATTRIBUTES 22 - -; The downloaded file's certificate is not trusted by the certificate store and -; certificate attribute values were incorrect. -!define ERR_PREINSTALL_CERT_UNTRUSTED_AND_ATTRIBUTES 23 - -/** - * The following errors prefixed with ERR_INSTALL apply to the install phase. - */ -; The installation timed out. The installation timeout is defined by the number -; of progress steps defined in InstallTotalSteps and the install timer -; interval defined in InstallIntervalMS -!define ERR_INSTALL_TIMEOUT 30 - -; Maximum times to retry the download before displaying an error -!define DownloadMaxRetries 9 - -; Minimum size expected to download in bytes -!define DownloadMinSizeBytes 15728640 ; 15 MB - -; Maximum size expected to download in bytes -!define DownloadMaxSizeBytes 73400320 ; 70 MB - -; Interval before retrying to download. 3 seconds is used along with 10 -; attempted downloads (the first attempt along with 9 retries) to give a -; minimum of 30 seconds or retrying before giving up. -!define DownloadRetryIntervalMS 3000 - -; Interval for the download timer -!define DownloadIntervalMS 200 - -; Interval for the install timer -!define InstallIntervalMS 100 - -; The first step for the install progress bar. By starting with a large step -; immediate feedback is given to the user. -!define InstallProgressFirstStep 20 - -; The finish step size to quickly increment the progress bar after the -; installation has finished. -!define InstallProgressFinishStep 40 - -; Number of steps for the install progress. -; This might not be enough when installing on a slow network drive so it will -; fallback to downloading the full installer if it reaches this number. The size -; of the install progress step is increased when the full installer finishes -; instead of waiting. - -; Approximately 150 seconds with a 100 millisecond timer and a first step of 20 -; as defined by InstallProgressFirstStep. -!define /math InstallCleanTotalSteps ${InstallProgressFirstStep} + 1500 - -; Approximately 165 seconds (minus 0.2 seconds for each file that is removed) -; with a 100 millisecond timer and a first step of 20 as defined by -; InstallProgressFirstStep . -!define /math InstallPaveOverTotalSteps ${InstallProgressFirstStep} + 1800 - -; On Vista and above attempt to elevate Standard Users in addition to users that -; are a member of the Administrators group. -!define NONADMIN_ELEVATE - -!define CONFIG_INI "config.ini" - -!ifndef FILE_SHARE_READ - !define FILE_SHARE_READ 1 -!endif -!ifndef GENERIC_READ - !define GENERIC_READ 0x80000000 -!endif -!ifndef OPEN_EXISTING - !define OPEN_EXISTING 3 -!endif -!ifndef INVALID_HANDLE_VALUE - !define INVALID_HANDLE_VALUE -1 -!endif - -!define DefaultInstDir32bit "$PROGRAMFILES32\${BrandFullName}" -!define DefaultInstDir64bit "$PROGRAMFILES64\${BrandFullName}" - -!include "nsDialogs.nsh" -!include "LogicLib.nsh" -!include "FileFunc.nsh" -!include "TextFunc.nsh" -!include "WinVer.nsh" -!include "WordFunc.nsh" - -!insertmacro GetParameters -!insertmacro GetOptions -!insertmacro LineFind -!insertmacro StrFilter - -!include "StrFunc.nsh" -${StrTok} - -!include "locales.nsi" -!include "branding.nsi" - -!include "defines.nsi" - -; Must be included after defines.nsi -!include "locale-fonts.nsh" - -; The OFFICIAL define is a workaround to support different urls for Release and -; Beta since they share the same branding when building with other branches that -; set the update channel to beta. -!ifdef OFFICIAL -!ifdef BETA_UPDATE_CHANNEL -!undef URLStubDownload32 -!undef URLStubDownload64 -!define URLStubDownload32 "http://download.mozilla.org/?os=win&lang=${AB_CD}&product=firefox-beta-latest" -!define URLStubDownload64 "http://download.mozilla.org/?os=win64&lang=${AB_CD}&product=firefox-beta-latest" -!undef URLManualDownload -!define URLManualDownload "https://www.mozilla.org/${AB_CD}/firefox/installer-help/?channel=beta&installer_lang=${AB_CD}" -!undef Channel -!define Channel "beta" -!endif -!endif - -!include "common.nsh" - -!insertmacro ElevateUAC -!insertmacro GetLongPath -!insertmacro GetPathFromString -!insertmacro GetParent -!insertmacro GetSingleInstallPath -!insertmacro GetTextWidthHeight -!insertmacro IsUserAdmin -!insertmacro RemovePrecompleteEntries -!insertmacro SetBrandNameVars -!insertmacro ITBL3Create -!insertmacro UnloadUAC - -VIAddVersionKey "FileDescription" "${BrandShortName} Stub Installer" -VIAddVersionKey "OriginalFilename" "setup-stub.exe" - -Name "$BrandFullName" -OutFile "setup-stub.exe" -icon "setup.ico" -XPStyle on -BrandingText " " -ChangeUI all "nsisui.exe" - -!ifdef ${AB_CD}_rtl - LoadLanguageFile "locale-rtl.nlf" -!else - LoadLanguageFile "locale.nlf" -!endif - -!include "nsisstrings.nlf" - -!define INTRO_BLURB "$(INTRO_BLURB1)" -!define INSTALL_BLURB1 "$(INSTALL_BLURB1)" -!define INSTALL_BLURB2 "$(INSTALL_BLURB2)" -!define INSTALL_BLURB3 "$(INSTALL_BLURB3)" - -Caption "$(WIN_CAPTION)" - -Page custom createDummy ; Needed to enable the Intro page's back button -Page custom createIntro leaveIntro ; Introduction page -Page custom createOptions leaveOptions ; Options page -Page custom createInstall ; Download / Installation page - -Function .onInit - ; Remove the current exe directory from the search order. - ; This only effects LoadLibrary calls and not implicitly loaded DLLs. - System::Call 'kernel32::SetDllDirectoryW(w "")' - - StrCpy $LANGUAGE 0 - ; This macro is used to set the brand name variables but the ini file method - ; isn't supported for the stub installer. - ${SetBrandNameVars} "$PLUGINSDIR\ignored.ini" - - ; Don't install on systems that don't support SSE2. The parameter value of - ; 10 is for PF_XMMI64_INSTRUCTIONS_AVAILABLE which will check whether the - ; SSE2 instruction set is available. - System::Call "kernel32::IsProcessorFeaturePresent(i 10)i .R7" - - ; Windows NT 6.0 (Vista/Server 2008) and lower are not supported. - ${Unless} ${AtLeastWin7} - ${If} "$R7" == "0" - strCpy $R7 "$(WARN_MIN_SUPPORTED_OSVER_CPU_MSG)" - ${Else} - strCpy $R7 "$(WARN_MIN_SUPPORTED_OSVER_MSG)" - ${EndIf} - MessageBox MB_OKCANCEL|MB_ICONSTOP "$R7" IDCANCEL +2 - ExecShell "open" "${URLSystemRequirements}" - Quit - ${EndUnless} - - ; SSE2 CPU support - ${If} "$R7" == "0" - MessageBox MB_OKCANCEL|MB_ICONSTOP "$(WARN_MIN_SUPPORTED_CPU_MSG)" IDCANCEL +2 - ExecShell "open" "${URLSystemRequirements}" - Quit - ${EndIf} - - ; Bug 1338583: disable 64-bit as default until Flash issues are resolved - ;${If} ${RunningX64} - ; StrCpy $INSTDIR "${DefaultInstDir64bit}" - ;${Else} - StrCpy $INSTDIR "${DefaultInstDir32bit}" - ;${EndIf} - - ; Require elevation if the user can elevate - ${ElevateUAC} - -; The commands inside this ifndef are needed prior to NSIS 3.0a2 and can be -; removed after we require NSIS 3.0a2 or greater. -!ifndef NSIS_PACKEDVERSION - ${If} ${AtLeastWinVista} - System::Call 'user32::SetProcessDPIAware()' - ${EndIf} -!endif - - ; If we have any existing installation, use its location as the default - ; path for this install, even if it's not the same architecture. - SetRegView 32 - SetShellVarContext all ; Set SHCTX to HKLM - ${GetSingleInstallPath} "Software\Mozilla\${BrandFullNameInternal}" $R9 - - ${If} "$R9" == "false" - ${AndIf} ${RunningX64} - SetRegView 64 - ${GetSingleInstallPath} "Software\Mozilla\${BrandFullNameInternal}" $R9 - ${EndIf} - - ${If} "$R9" == "false" - SetShellVarContext current ; Set SHCTX to HKCU - ${GetSingleInstallPath} "Software\Mozilla\${BrandFullNameInternal}" $R9 - - ${If} ${RunningX64} - ; In HKCU there is no WOW64 redirection, which means we may have gotten - ; the path to a 32-bit install even though we're 64-bit. - ; In that case, just use the default path instead of offering an upgrade. - ; But only do that override if the existing install is in Program Files, - ; because that's the only place we can be sure is specific - ; to either 32 or 64 bit applications. - ; The WordFind syntax below searches for the first occurence of the - ; "delimiter" (the Program Files path) in the install path and returns - ; anything that appears before that. If nothing appears before that, - ; then the install is under Program Files. - ${WordFind} $R9 $PROGRAMFILES32 "+1{" $0 - ${If} $0 == "" - StrCpy $R9 "false" - ${EndIf} - ${EndIf} - ${EndIf} - - StrCpy $PreviousInstallDir "" - StrCpy $PreviousInstallArch "" - ${If} "$R9" != "false" - ; Don't override the default install path with an existing installation - ; of a different architecture. - System::Call "*(i)p.r0" - StrCpy $1 "$R9\${FileMainEXE}" - System::Call "Kernel32::GetBinaryTypeW(w r1, p r0)i" - System::Call "*$0(i.r2)" - System::Free $0 - - ${If} $2 == "6" ; 6 == SCS_64BIT_BINARY - ${AndIf} ${RunningX64} - StrCpy $PreviousInstallDir "$R9" - StrCpy $PreviousInstallArch "64" - StrCpy $INSTDIR "$PreviousInstallDir" - ${ElseIf} $2 == "0" ; 0 == SCS_32BIT_BINARY - ${AndIfNot} ${RunningX64} - StrCpy $PreviousInstallDir "$R9" - StrCpy $PreviousInstallArch "32" - StrCpy $INSTDIR "$PreviousInstallDir" - ${EndIf} - ${EndIf} - - ; Used to determine if the default installation directory was used. - StrCpy $InitialInstallDir "$INSTDIR" - - ClearErrors - WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" \ - "Write Test" - - ; Only display set as default when there is write access to HKLM and on Win7 - ; and below. - ${If} ${Errors} - ${OrIf} ${AtLeastWin8} - StrCpy $CanSetAsDefault "false" - StrCpy $CheckboxSetAsDefault "0" - ${Else} - DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" - StrCpy $CanSetAsDefault "true" - ${EndIf} - - ; The interval in MS used for the progress bars set as marquee. - ${If} ${AtLeastWinVista} - StrCpy $ProgressbarMarqueeIntervalMS "10" - ${Else} - StrCpy $ProgressbarMarqueeIntervalMS "50" - ${EndIf} - - ; Initialize the majority of variables except those that need to be reset - ; when a page is displayed. - StrCpy $IntroPhaseSeconds "0" - StrCpy $OptionsPhaseSeconds "0" - StrCpy $EndPreInstallPhaseTickCount "0" - StrCpy $EndInstallPhaseTickCount "0" - StrCpy $InitialInstallRequirementsCode "" - StrCpy $IsDownloadFinished "" - StrCpy $BasiliskLaunchCode "0" - StrCpy $CheckboxShortcuts "1" - StrCpy $CheckboxSendPing "1" -!ifdef MOZ_MAINTENANCE_SERVICE - StrCpy $CheckboxInstallMaintSvc "1" -!else - StrCpy $CheckboxInstallMaintSvc "0" -!endif - StrCpy $WasOptionsButtonClicked "0" - ; Bug 1338583: disable 64-bit as default until Flash issues are resolved - ;${If} ${RunningX64} - ;StrCpy $DroplistArch "$(VERSION_64BIT)" - ;${Else} - StrCpy $DroplistArch "$(VERSION_32BIT)" - ;${EndIf} - - StrCpy $0 "" -!ifdef FONT_FILE1 - ${If} ${FileExists} "$FONTS\${FONT_FILE1}" - StrCpy $0 "${FONT_NAME1}" - ${EndIf} -!endif - -!ifdef FONT_FILE2 - ${If} $0 == "" - ${AndIf} ${FileExists} "$FONTS\${FONT_FILE2}" - StrCpy $0 "${FONT_NAME2}" - ${EndIf} -!endif - - ${If} $0 == "" - StrCpy $0 "$(^Font)" - ${EndIf} - - CreateFont $FontBlurb "$0" "12" "500" - CreateFont $FontNormal "$0" "11" "500" - CreateFont $FontItalic "$0" "11" "500" /ITALIC - - InitPluginsDir - File /oname=$PLUGINSDIR\bgintro.bmp "bgintro.bmp" - File /oname=$PLUGINSDIR\appname.bmp "appname.bmp" - File /oname=$PLUGINSDIR\clock.bmp "clock.bmp" - File /oname=$PLUGINSDIR\particles.bmp "particles.bmp" -!ifdef ${AB_CD}_rtl - ; The horizontally flipped pencil looks better in RTL - File /oname=$PLUGINSDIR\pencil.bmp "pencil-rtl.bmp" -!else - File /oname=$PLUGINSDIR\pencil.bmp "pencil.bmp" -!endif -FunctionEnd - -; .onGUIInit isn't needed except for RTL locales -!ifdef ${AB_CD}_rtl -Function .onGUIInit - ; Since NSIS RTL support doesn't mirror progress bars use Windows mirroring. - ${NSD_AddExStyle} $HWNDPARENT ${WS_EX_LAYOUTRTL} - ${RemoveExStyle} $HWNDPARENT ${WS_EX_RTLREADING} - ${RemoveExStyle} $HWNDPARENT ${WS_EX_RIGHT} - ${NSD_AddExStyle} $HWNDPARENT ${WS_EX_LEFT}|${WS_EX_LTRREADING} -FunctionEnd -!endif - -Function .onGUIEnd - Delete "$PLUGINSDIR\_temp" - Delete "$PLUGINSDIR\download.exe" - Delete "$PLUGINSDIR\${CONFIG_INI}" - - ${UnloadUAC} -FunctionEnd - -Function .onUserAbort - ${NSD_KillTimer} StartDownload - ${NSD_KillTimer} OnDownload - ${NSD_KillTimer} CheckInstall - ${NSD_KillTimer} FinishInstall - ${NSD_KillTimer} FinishProgressBar - ${NSD_KillTimer} DisplayDownloadError - - ${If} "$IsDownloadFinished" != "" - Call DisplayDownloadError - ; Aborting the abort will allow SendPing which is called by - ; DisplayDownloadError to hide the installer window and close the installer - ; after it sends the metrics ping. - Abort - ${EndIf} -FunctionEnd - -Function SendPing - HideWindow - ; Try to send a ping if a download was attempted - ${If} $CheckboxSendPing == 1 - ${AndIf} $IsDownloadFinished != "" - ; Get the tick count for the completion of all phases. - System::Call "kernel32::GetTickCount()l .s" - Pop $EndFinishPhaseTickCount - - ; When the value of $IsDownloadFinished is false the download was started - ; but didn't finish. In this case the tick count stored in - ; $EndFinishPhaseTickCount is used to determine how long the download was - ; in progress. - ${If} "$IsDownloadFinished" == "false" - ${OrIf} "$EndDownloadPhaseTickCount" == "" - StrCpy $EndDownloadPhaseTickCount "$EndFinishPhaseTickCount" - ; Cancel the download in progress - InetBgDL::Get /RESET /END - ${EndIf} - - - ; When $DownloadFirstTransferSeconds equals an empty string the download - ; never successfully started so set the value to 0. It will be possible to - ; determine that the download didn't successfully start from the seconds for - ; the last download. - ${If} "$DownloadFirstTransferSeconds" == "" - StrCpy $DownloadFirstTransferSeconds "0" - ${EndIf} - - ; When $StartLastDownloadTickCount equals an empty string the download never - ; successfully started so set the value to $EndDownloadPhaseTickCount to - ; compute the correct value. - ${If} $StartLastDownloadTickCount == "" - ; This could happen if the download never successfully starts - StrCpy $StartLastDownloadTickCount "$EndDownloadPhaseTickCount" - ${EndIf} - - ; When $EndPreInstallPhaseTickCount equals 0 the installation phase was - ; never completed so set its value to $EndFinishPhaseTickCount to compute - ; the correct value. - ${If} "$EndPreInstallPhaseTickCount" == "0" - StrCpy $EndPreInstallPhaseTickCount "$EndFinishPhaseTickCount" - ${EndIf} - - ; When $EndInstallPhaseTickCount equals 0 the installation phase was never - ; completed so set its value to $EndFinishPhaseTickCount to compute the - ; correct value. - ${If} "$EndInstallPhaseTickCount" == "0" - StrCpy $EndInstallPhaseTickCount "$EndFinishPhaseTickCount" - ${EndIf} - - ; Get the seconds elapsed from the start of the download phase to the end of - ; the download phase. - ${GetSecondsElapsed} "$StartDownloadPhaseTickCount" "$EndDownloadPhaseTickCount" $0 - - ; Get the seconds elapsed from the start of the last download to the end of - ; the last download. - ${GetSecondsElapsed} "$StartLastDownloadTickCount" "$EndDownloadPhaseTickCount" $1 - - ; Get the seconds elapsed from the end of the download phase to the - ; completion of the pre-installation check phase. - ${GetSecondsElapsed} "$EndDownloadPhaseTickCount" "$EndPreInstallPhaseTickCount" $2 - - ; Get the seconds elapsed from the end of the pre-installation check phase - ; to the completion of the installation phase. - ${GetSecondsElapsed} "$EndPreInstallPhaseTickCount" "$EndInstallPhaseTickCount" $3 - - ; Get the seconds elapsed from the end of the installation phase to the - ; completion of all phases. - ${GetSecondsElapsed} "$EndInstallPhaseTickCount" "$EndFinishPhaseTickCount" $4 - - ${If} $DroplistArch == "$(VERSION_64BIT)" - StrCpy $R0 "1" - ${Else} - StrCpy $R0 "0" - ${EndIf} - - ${If} ${RunningX64} - StrCpy $R1 "1" - ${Else} - StrCpy $R1 "0" - ${EndIf} - - ; Though these values are sometimes incorrect due to bug 444664 it happens - ; so rarely it isn't worth working around it by reading the registry values. - ${WinVerGetMajor} $5 - ${WinVerGetMinor} $6 - ${WinVerGetBuild} $7 - ${WinVerGetServicePackLevel} $8 - ${If} ${IsServerOS} - StrCpy $9 "1" - ${Else} - StrCpy $9 "0" - ${EndIf} - - ${If} "$ExitCode" == "${ERR_SUCCESS}" - ReadINIStr $R5 "$INSTDIR\application.ini" "App" "Version" - ReadINIStr $R6 "$INSTDIR\application.ini" "App" "BuildID" - ${Else} - StrCpy $R5 "0" - StrCpy $R6 "0" - ${EndIf} - - ; Whether installed into the default installation directory - ${GetLongPath} "$INSTDIR" $R7 - ${GetLongPath} "$InitialInstallDir" $R8 - ${If} "$R7" == "$R8" - StrCpy $R7 "1" - ${Else} - StrCpy $R7 "0" - ${EndIf} - - ClearErrors - WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" \ - "Write Test" - ${If} ${Errors} - StrCpy $R8 "0" - ${Else} - DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" - StrCpy $R8 "1" - ${EndIf} - - ${If} "$DownloadServerIP" == "" - StrCpy $DownloadServerIP "Unknown" - ${EndIf} - - StrCpy $R2 "" - SetShellVarContext current ; Set SHCTX to the current user - ReadRegStr $R2 HKCU "Software\Classes\http\shell\open\command" "" - ${If} $R2 != "" - ${GetPathFromString} "$R2" $R2 - ${GetParent} "$R2" $R3 - ${GetLongPath} "$R3" $R3 - ${If} $R3 == $INSTDIR - StrCpy $R2 "1" ; This Basilisk install is set as default. - ${Else} - StrCpy $R2 "$R2" "" -11 # length of firefox.exe - ${If} "$R2" == "${FileMainEXE}" - StrCpy $R2 "2" ; Another Basilisk install is set as default. - ${Else} - StrCpy $R2 "0" - ${EndIf} - ${EndIf} - ${Else} - StrCpy $R2 "0" ; Basilisk is not set as default. - ${EndIf} - - ${If} "$R2" == "0" - ${AndIf} ${AtLeastWinVista} - ; Check to see if this install location is currently set as the default - ; browser by Default Programs which is only available on Vista and above. - ClearErrors - ReadRegStr $R3 HKLM "Software\RegisteredApplications" "${AppRegName}" - ${Unless} ${Errors} - AppAssocReg::QueryAppIsDefaultAll "${AppRegName}" "effective" - Pop $R3 - ${If} $R3 == "1" - StrCpy $R3 "" - ReadRegStr $R2 HKLM "Software\Classes\http\shell\open\command" "" - ${If} $R2 != "" - ${GetPathFromString} "$R2" $R2 - ${GetParent} "$R2" $R3 - ${GetLongPath} "$R3" $R3 - ${If} $R3 == $INSTDIR - StrCpy $R2 "1" ; This Basilisk install is set as default. - ${Else} - StrCpy $R2 "$R2" "" -11 # length of firefox.exe - ${If} "$R2" == "${FileMainEXE}" - StrCpy $R2 "2" ; Another Basilisk install is set as default. - ${Else} - StrCpy $R2 "0" - ${EndIf} - ${EndIf} - ${Else} - StrCpy $R2 "0" ; Basilisk is not set as default. - ${EndIf} - ${EndIf} - ${EndUnless} - ${EndIf} - - ${If} $CanSetAsDefault == "true" - ${If} $CheckboxSetAsDefault == "1" - StrCpy $R3 "2" - ${Else} - StrCpy $R3 "3" - ${EndIf} - ${Else} - ${If} ${AtLeastWin8} - StrCpy $R3 "1" - ${Else} - StrCpy $R3 "0" - ${EndIf} - ${EndIf} - -!ifdef STUB_DEBUG - MessageBox MB_OK "${BaseURLStubPing} \ - $\nStub URL Version = ${StubURLVersion}${StubURLVersionAppend} \ - $\nBuild Channel = ${Channel} \ - $\nUpdate Channel = ${UpdateChannel} \ - $\nLocale = ${AB_CD} \ - $\nBasilisk x64 = $R0 \ - $\nRunning x64 Windows = $R1 \ - $\nMajor = $5 \ - $\nMinor = $6 \ - $\nBuild = $7 \ - $\nServicePack = $8 \ - $\nIsServer = $9 \ - $\nExit Code = $ExitCode \ - $\nBasilisk Launch Code = $BasiliskLaunchCode \ - $\nDownload Retry Count = $DownloadRetryCount \ - $\nDownloaded Bytes = $DownloadedBytes \ - $\nDownload Size Bytes = $DownloadSizeBytes \ - $\nIntroduction Phase Seconds = $IntroPhaseSeconds \ - $\nOptions Phase Seconds = $OptionsPhaseSeconds \ - $\nDownload Phase Seconds = $0 \ - $\nLast Download Seconds = $1 \ - $\nDownload First Transfer Seconds = $DownloadFirstTransferSeconds \ - $\nPreinstall Phase Seconds = $2 \ - $\nInstall Phase Seconds = $3 \ - $\nFinish Phase Seconds = $4 \ - $\nInitial Install Requirements Code = $InitialInstallRequirementsCode \ - $\nOpened Download Page = $OpenedDownloadPage \ - $\nExisting Profile = $ExistingProfile \ - $\nExisting Version = $ExistingVersion \ - $\nExisting Build ID = $ExistingBuildID \ - $\nNew Version = $R5 \ - $\nNew Build ID = $R6 \ - $\nDefault Install Dir = $R7 \ - $\nHas Admin = $R8 \ - $\nDefault Status = $R2 \ - $\nSet As Sefault Status = $R3 \ - $\nDownload Server IP = $DownloadServerIP \ - $\nPost-Signing Data = $PostSigningData" - ; The following will exit the installer - SetAutoClose true - StrCpy $R9 "2" - Call RelativeGotoPage -!else - ${NSD_CreateTimer} OnPing ${DownloadIntervalMS} - InetBgDL::Get "${BaseURLStubPing}/${StubURLVersion}${StubURLVersionAppend}/${Channel}/${UpdateChannel}/${AB_CD}/$R0/$R1/$5/$6/$7/$8/$9/$ExitCode/$BasiliskLaunchCode/$DownloadRetryCount/$DownloadedBytes/$DownloadSizeBytes/$IntroPhaseSeconds/$OptionsPhaseSeconds/$0/$1/$DownloadFirstTransferSeconds/$2/$3/$4/$InitialInstallRequirementsCode/$OpenedDownloadPage/$ExistingProfile/$ExistingVersion/$ExistingBuildID/$R5/$R6/$R7/$R8/$R2/$R3/$DownloadServerIP/$PostSigningData" \ - "$PLUGINSDIR\_temp" /END -!endif - ${Else} - ${If} "$IsDownloadFinished" == "false" - ; Cancel the download in progress - InetBgDL::Get /RESET /END - ${EndIf} - ; The following will exit the installer - SetAutoClose true - StrCpy $R9 "2" - Call RelativeGotoPage - ${EndIf} -FunctionEnd - -Function createDummy -FunctionEnd - -Function createIntro - nsDialogs::Create /NOUNLOAD 1018 - Pop $Dialog - - GetFunctionAddress $0 OnBack - nsDialogs::OnBack /NOUNLOAD $0 - -!ifdef ${AB_CD}_rtl - ; For RTL align the text with the top of the F in the Basilisk bitmap - StrCpy $0 "${INTRO_BLURB_RTL_TOP_DU}" -!else - ; For LTR align the text with the top of the x in the Basilisk bitmap - StrCpy $0 "${INTRO_BLURB_LTR_TOP_DU}" -!endif - ${NSD_CreateLabel} ${INTRO_BLURB_EDGE_DU} $0 ${INTRO_BLURB_WIDTH_DU} 76u "${INTRO_BLURB}" - Pop $0 - SendMessage $0 ${WM_SETFONT} $FontBlurb 0 - SetCtlColors $0 ${INTRO_BLURB_TEXT_COLOR} transparent - - SetCtlColors $HWNDPARENT ${FOOTER_CONTROL_TEXT_COLOR_NORMAL} ${FOOTER_BKGRD_COLOR} - GetDlgItem $0 $HWNDPARENT 10 ; Default browser checkbox - ${If} "$CanSetAsDefault" == "true" - ; The uxtheme must be disabled on checkboxes in order to override the - ; system font color. - System::Call 'uxtheme::SetWindowTheme(i $0 , w " ", w " ")' - SendMessage $0 ${WM_SETFONT} $FontNormal 0 - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(MAKE_DEFAULT)" - SendMessage $0 ${BM_SETCHECK} 1 0 - SetCtlColors $0 ${FOOTER_CONTROL_TEXT_COLOR_NORMAL} ${FOOTER_BKGRD_COLOR} - ${Else} - ShowWindow $0 ${SW_HIDE} - ${EndIf} - GetDlgItem $0 $HWNDPARENT 11 - ShowWindow $0 ${SW_HIDE} - - ${NSD_CreateBitmap} ${APPNAME_BMP_EDGE_DU} ${APPNAME_BMP_TOP_DU} \ - ${APPNAME_BMP_WIDTH_DU} ${APPNAME_BMP_HEIGHT_DU} "" - Pop $2 - ${SetStretchedTransparentImage} $2 $PLUGINSDIR\appname.bmp $0 - - ${NSD_CreateBitmap} 0 0 100% 100% "" - Pop $2 - ${NSD_SetStretchedImage} $2 $PLUGINSDIR\bgintro.bmp $1 - - GetDlgItem $0 $HWNDPARENT 1 ; Install button - ${If} ${FileExists} "$INSTDIR\${FileMainEXE}" - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(UPGRADE_BUTTON)" - ${Else} - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(INSTALL_BUTTON)" - ${EndIf} - ${NSD_SetFocus} $0 - - GetDlgItem $0 $HWNDPARENT 2 ; Cancel button - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(CANCEL_BUTTON)" - - GetDlgItem $0 $HWNDPARENT 3 ; Back button used for Options - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(OPTIONS_BUTTON)" - - System::Call "kernel32::GetTickCount()l .s" - Pop $StartIntroPhaseTickCount - - LockWindow off - nsDialogs::Show - - ${NSD_FreeImage} $0 - ${NSD_FreeImage} $1 -FunctionEnd - -Function leaveIntro - LockWindow on - - System::Call "kernel32::GetTickCount()l .s" - Pop $0 - ${GetSecondsElapsed} "$StartIntroPhaseTickCount" "$0" $IntroPhaseSeconds - ; It is possible for this value to be 0 if the user clicks fast enough so - ; increment the value by 1 if it is 0. - ${If} $IntroPhaseSeconds == 0 - IntOp $IntroPhaseSeconds $IntroPhaseSeconds + 1 - ${EndIf} - - SetShellVarContext all ; Set SHCTX to All Users - ; If the user doesn't have write access to the installation directory set - ; the installation directory to a subdirectory of the All Users application - ; directory and if the user can't write to that location set the installation - ; directory to a subdirectory of the users local application directory - ; (e.g. non-roaming). - Call CanWrite - ${If} "$CanWriteToInstallDir" == "false" - StrCpy $INSTDIR "$APPDATA\${BrandFullName}\" - Call CanWrite - ${If} "$CanWriteToInstallDir" == "false" - ; This should never happen but just in case. - StrCpy $CanWriteToInstallDir "false" - ${Else} - StrCpy $INSTDIR "$LOCALAPPDATA\${BrandFullName}\" - Call CanWrite - ${EndIf} - ${EndIf} - - Call CheckSpace - - ${If} ${FileExists} "$INSTDIR" - ; Always display the long path if the path exists. - ${GetLongPath} "$INSTDIR" $INSTDIR - ${EndIf} - -FunctionEnd - -Function createOptions - ; Check whether the install requirements are satisfied using the default - ; values for metrics. - ${If} "$InitialInstallRequirementsCode" == "" - ${If} "$CanWriteToInstallDir" != "true" - ${AndIf} "$HasRequiredSpaceAvailable" != "true" - StrCpy $InitialInstallRequirementsCode "1" - ${ElseIf} "$CanWriteToInstallDir" != "true" - StrCpy $InitialInstallRequirementsCode "2" - ${ElseIf} "$HasRequiredSpaceAvailable" != "true" - StrCpy $InitialInstallRequirementsCode "3" - ${Else} - StrCpy $InitialInstallRequirementsCode "0" - ${EndIf} - ${EndIf} - - ; Skip the options page unless the Options button was clicked as long as the - ; installation directory can be written to and there is the minimum required - ; space available. - ${If} "$WasOptionsButtonClicked" != "1" - ${If} "$CanWriteToInstallDir" == "true" - ${AndIf} "$HasRequiredSpaceAvailable" == "true" - Abort ; Skip the options page - ${EndIf} - ${EndIf} - - StrCpy $ExistingTopDir "" - StrCpy $ControlTopAdjustment 0 - - ; Convert the options item width to pixels, so we can tell when a text string - ; exceeds this width and needs multiple lines. - StrCpy $2 "${OPTIONS_ITEM_WIDTH_DU}" -1 - IntOp $2 $2 - 14 ; subtract approximate width of a checkbox - System::Call "*(i r2,i,i,i) p .r3" - System::Call "user32::MapDialogRect(p $HWNDPARENT, p r3)" - System::Call "*$3(i .s,i,i,i)" - Pop $OptionsItemWidthPX - System::Free $3 - - nsDialogs::Create /NOUNLOAD 1018 - Pop $Dialog - ; Since the text color for controls is set in this Dialog the foreground and - ; background colors of the Dialog must also be hardcoded. - SetCtlColors $Dialog ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - - ${NSD_CreateLabel} ${OPTIONS_ITEM_EDGE_DU} 25u ${OPTIONS_ITEM_WIDTH_DU} \ - 12u "$(DEST_FOLDER)" - Pop $0 - SetCtlColors $0 ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $0 ${WM_SETFONT} $FontNormal 0 - - ${NSD_CreateDirRequest} ${OPTIONS_SUBITEM_EDGE_DU} 41u 159u 14u "$INSTDIR" - Pop $DirRequest - SetCtlColors $DirRequest ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $DirRequest ${WM_SETFONT} $FontNormal 0 - System::Call shlwapi::SHAutoComplete(i $DirRequest, i ${SHACF_FILESYSTEM}) - ${NSD_OnChange} $DirRequest OnChange_DirRequest - -!ifdef ${AB_CD}_rtl - ; Remove the RTL styling from the directory request text box - ${RemoveStyle} $DirRequest ${SS_RIGHT} - ${RemoveExStyle} $DirRequest ${WS_EX_RIGHT} - ${RemoveExStyle} $DirRequest ${WS_EX_RTLREADING} - ${NSD_AddStyle} $DirRequest ${SS_LEFT} - ${NSD_AddExStyle} $DirRequest ${WS_EX_LTRREADING}|${WS_EX_LEFT} -!endif - - ${NSD_CreateBrowseButton} 280u 41u 50u 14u "$(BROWSE_BUTTON)" - Pop $ButtonBrowse - SetCtlColors $ButtonBrowse "" ${COMMON_BKGRD_COLOR} - ${NSD_OnClick} $ButtonBrowse OnClick_ButtonBrowse - - ; Get the number of pixels from the left of the Dialog to the right side of - ; the "Space Required:" and "Space Available:" labels prior to setting RTL so - ; the correct position of the controls can be set by NSIS for RTL locales. - - ; Get the width and height of both labels and use the tallest for the height - ; and the widest to calculate where to place the labels after these labels. - ${GetTextExtent} "$(SPACE_REQUIRED)" $FontItalic $0 $1 - ${GetTextExtent} "$(SPACE_AVAILABLE)" $FontItalic $2 $3 - ${If} $1 > $3 - StrCpy $ControlHeightPX "$1" - ${Else} - StrCpy $ControlHeightPX "$3" - ${EndIf} - - IntOp $0 $0 + 8 ; Add padding to the control's width - ; Make both controls the same width as the widest control - ${NSD_CreateLabelCenter} ${OPTIONS_SUBITEM_EDGE_DU} 59u $0 $ControlHeightPX "$(SPACE_REQUIRED)" - Pop $5 - SetCtlColors $5 ${COMMON_TEXT_COLOR_FADED} ${COMMON_BKGRD_COLOR} - SendMessage $5 ${WM_SETFONT} $FontItalic 0 - - IntOp $2 $2 + 8 ; Add padding to the control's width - ${NSD_CreateLabelCenter} ${OPTIONS_SUBITEM_EDGE_DU} 70u $2 $ControlHeightPX "$(SPACE_AVAILABLE)" - Pop $6 - SetCtlColors $6 ${COMMON_TEXT_COLOR_FADED} ${COMMON_BKGRD_COLOR} - SendMessage $6 ${WM_SETFONT} $FontItalic 0 - - ; Use the widest label for aligning the labels next to them - ${If} $0 > $2 - StrCpy $6 "$5" - ${EndIf} - FindWindow $1 "#32770" "" $HWNDPARENT - ${GetDlgItemEndPX} $6 $ControlRightPX - - IntOp $ControlRightPX $ControlRightPX + 6 - - ${NSD_CreateLabel} $ControlRightPX 59u 100% $ControlHeightPX \ - "${APPROXIMATE_REQUIRED_SPACE_MB} $(MEGA)$(BYTE)" - Pop $7 - SetCtlColors $7 ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $7 ${WM_SETFONT} $FontNormal 0 - - ; Create the free space label with an empty string and update it by calling - ; UpdateFreeSpaceLabel - ${NSD_CreateLabel} $ControlRightPX 70u 100% $ControlHeightPX " " - Pop $LabelFreeSpace - SetCtlColors $LabelFreeSpace ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $LabelFreeSpace ${WM_SETFONT} $FontNormal 0 - - Call UpdateFreeSpaceLabel - - ${If} ${AtLeastWin7} - StrCpy $0 "$(ADD_SC_DESKTOP_TASKBAR)" - ${Else} - StrCpy $0 "$(ADD_SC_DESKTOP_QUICKLAUNCHBAR)" - ${EndIf} - - ; In some locales, this string may be too long to fit on one line. - ; In that case, we'll need to give the control two lines worth of height. - StrCpy $1 12 ; single line height - ${GetTextExtent} $0 $FontNormal $R1 $R2 - ${If} $R1 > $OptionsItemWidthPX - ; Add a second line to the control height. - IntOp $1 $1 + 12 - ; The rest of the controls will have to be lower to account for this label - ; needing two lines worth of height. - IntOp $ControlTopAdjustment $ControlTopAdjustment + 12 - ${EndIf} - ${NSD_CreateCheckbox} ${OPTIONS_ITEM_EDGE_DU} 100u \ - ${OPTIONS_ITEM_WIDTH_DU} "$1u" "$0" - Pop $CheckboxShortcuts - ; The uxtheme must be disabled on checkboxes in order to override the system - ; font color. - System::Call 'uxtheme::SetWindowTheme(i $CheckboxShortcuts, w " ", w " ")' - SetCtlColors $CheckboxShortcuts ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $CheckboxShortcuts ${WM_SETFONT} $FontNormal 0 - ${NSD_Check} $CheckboxShortcuts - - IntOp $0 116 + $ControlTopAdjustment - ; In some locales, this string may be too long to fit on one line. - ; In that case, we'll need to give the control two lines worth of height. - StrCpy $1 12 ; single line height - ${GetTextExtent} "$(SEND_PING)" $FontNormal $R1 $R2 - ${If} $R1 > $OptionsItemWidthPX - ; Add a second line to the control height. - IntOp $1 $1 + 12 - ; The rest of the controls will have to be lower to account for this label - ; needing two lines worth of height. - IntOp $ControlTopAdjustment $ControlTopAdjustment + 12 - ${EndIf} - ${NSD_CreateCheckbox} ${OPTIONS_ITEM_EDGE_DU} "$0u" ${OPTIONS_ITEM_WIDTH_DU} \ - "$1u" "$(SEND_PING)" - Pop $CheckboxSendPing - ; The uxtheme must be disabled on checkboxes in order to override the system - ; font color. - System::Call 'uxtheme::SetWindowTheme(i $CheckboxSendPing, w " ", w " ")' - SetCtlColors $CheckboxSendPing ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $CheckboxSendPing ${WM_SETFONT} $FontNormal 0 - ${NSD_Check} $CheckboxSendPing - -!ifdef MOZ_MAINTENANCE_SERVICE - StrCpy $CheckboxInstallMaintSvc "0" - ; We can only install the maintenance service if the user is an admin. - Call IsUserAdmin - Pop $0 - - ; Only show the maintenance service checkbox if we're on XP SP3 or higher; - ; we don't ever want to install it on XP without at least SP3 installed. - ${If} $0 == "true" - ${AndIf} ${IsWinXP} - ${AndIf} ${AtMostServicePack} 2 - StrCpy $0 "false" - ${EndIf} - - ${If} $0 == "true" - ; Only show the maintenance service checkbox if we have write access to HKLM - DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" - ClearErrors - WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" \ - "Write Test" - ${IfNot} ${Errors} - DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" - ; Read the registry instead of using ServicesHelper::IsInstalled so the - ; plugin isn't included in the stub installer to lessen its size. - ClearErrors - ReadRegStr $0 HKLM "SYSTEM\CurrentControlSet\services\MozillaMaintenance" "ImagePath" - ${If} ${Errors} - IntOp $0 132 + $ControlTopAdjustment - ; In some locales, this string may be too long to fit on one line. - ; In that case, we'll need to give the control two lines worth of height. - StrCpy $1 12 ; single line height - ${GetTextExtent} "$(INSTALL_MAINT_SERVICE)" $FontNormal $R1 $R2 - ${If} $R1 > $OptionsItemWidthPX - ; Add a second line to the control height. - IntOp $1 $1 + 12 - ; The rest of the controls will have to be lower to account for this label - ; needing two lines worth of height. - IntOp $ControlTopAdjustment $ControlTopAdjustment + 12 - ${EndIf} - ${NSD_CreateCheckbox} ${OPTIONS_ITEM_EDGE_DU} "$0u" ${OPTIONS_ITEM_WIDTH_DU} \ - "$1u" "$(INSTALL_MAINT_SERVICE)" - Pop $CheckboxInstallMaintSvc - System::Call 'uxtheme::SetWindowTheme(i $CheckboxInstallMaintSvc, w " ", w " ")' - SetCtlColors $CheckboxInstallMaintSvc ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $CheckboxInstallMaintSvc ${WM_SETFONT} $FontNormal 0 - ${NSD_Check} $CheckboxInstallMaintSvc - ; Since we're adding in an optional control, remember the lower the ones - ; that come after it. - IntOp $ControlTopAdjustment 20 + $ControlTopAdjustment - ${EndIf} - ${EndIf} - ${EndIf} -!endif - - ${If} ${RunningX64} - ; Get the exact pixel width we're going to need for this label. - ; The label string has a keyboard accelerator, which is an '&' that's in - ; the string but is not rendered, and GetTextExtent doesn't account for - ; those, so remove them first. Also handle any escaped &'s ("&&"). - StrCpy $R0 "$(ARCH_DROPLIST_LABEL)" - StrCpy $R1 "" - ${Do} - ${StrTok} $R2 $R0 "&" 0 0 - StrCpy $R1 "$R1$R2" - StrLen $R3 $R2 - IntOp $R3 $R3 + 1 - StrCpy $R0 $R0 "" $R3 - StrCpy $R4 $R0 1 - ${If} $R4 == "&" - StrCpy $R1 "$R1&" - StrCpy $R0 $R0 "" 1 - ${EndIf} - ${LoopUntil} $R0 == "" - - ${GetTextExtent} $R1 $FontNormal $R0 $R1 - IntOp $0 134 + $ControlTopAdjustment - ${NSD_CreateLabel} ${OPTIONS_ITEM_EDGE_DU} "$0u" $R0 $R1 "$(ARCH_DROPLIST_LABEL)" - Pop $0 - SetCtlColors $0 ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $0 ${WM_SETFONT} $FontNormal 0 - - ; Set the dropdown list size to the same as the larger of the two options. - ${GetTextExtent} "$(VERSION_32BIT)" $FontNormal $R0 $R1 - ${GetTextExtent} "$(VERSION_64BIT)" $FontNormal $R2 $R3 - ${If} $R0 < $R2 - StrCpy $R0 $R2 - ${EndIf} - ${If} $R1 < $R3 - StrCpy $R3 $R1 - ${EndIf} - ; Add enough width for the dropdown button. How wide the button is depends - ; on he system display scaling setting, which we cannot easily determine, - ; so just use a value that works fine for a setting of 200% and adds a - ; little too much padding for settings below that. - IntOp $R0 $R0 + 56 - - ; Put the droplist right after the label, with some padding. - ${GetDlgItemEndPX} $0 $ControlRightPX - IntOp $ControlRightPX $ControlRightPX + 4 - IntOp $0 132 + $ControlTopAdjustment - ${NSD_CreateDropList} $ControlRightPX "$0u" $R0 $R3 "" - Pop $DroplistArch - ${NSD_CB_AddString} $DroplistArch "$(VERSION_32BIT)" - ${NSD_CB_AddString} $DroplistArch "$(VERSION_64BIT)" - ${NSD_OnChange} $DroplistArch OnChange_DroplistArch - ; The uxtheme must be disabled in order to override the system colors. - System::Call 'uxtheme::SetWindowTheme(i $DroplistArch, w " ", w " ")' - SetCtlColors $DroplistArch ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - SendMessage $DroplistArch ${WM_SETFONT} $FontNormal 0 - ; Bug 1338583: disable 64-bit as default until Flash issues are resolved - ${NSD_CB_SelectString} $DroplistArch "$(VERSION_32BIT)" - ${EndIf} - - GetDlgItem $0 $HWNDPARENT 1 ; Install button - ${If} ${FileExists} "$INSTDIR\${FileMainEXE}" - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(UPGRADE_BUTTON)" - ${Else} - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(INSTALL_BUTTON)" - ${EndIf} - ${NSD_SetFocus} $0 - - GetDlgItem $0 $HWNDPARENT 2 ; Cancel button - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(CANCEL_BUTTON)" - - GetDlgItem $0 $HWNDPARENT 3 ; Back button used for Options - EnableWindow $0 0 - ShowWindow $0 ${SW_HIDE} - - ; If the option button was not clicked display the reason for what needs to be - ; resolved to continue the installation. - ${If} "$WasOptionsButtonClicked" != "1" - ${If} "$CanWriteToInstallDir" == "false" - MessageBox MB_OK|MB_ICONEXCLAMATION "$(WARN_WRITE_ACCESS)" - ${ElseIf} "$HasRequiredSpaceAvailable" == "false" - MessageBox MB_OK|MB_ICONEXCLAMATION "$(WARN_DISK_SPACE)" - ${EndIf} - ${EndIf} - - System::Call "kernel32::GetTickCount()l .s" - Pop $StartOptionsPhaseTickCount - - LockWindow off - nsDialogs::Show -FunctionEnd - -Function leaveOptions - LockWindow on - - ${GetRoot} "$INSTDIR" $0 - ${GetLongPath} "$INSTDIR" $INSTDIR - ${GetLongPath} "$0" $0 - ${If} "$INSTDIR" == "$0" - LockWindow off - MessageBox MB_OK|MB_ICONEXCLAMATION "$(WARN_ROOT_INSTALL)" - Abort ; Stay on the page - ${EndIf} - - Call CanWrite - ${If} "$CanWriteToInstallDir" == "false" - LockWindow off - MessageBox MB_OK|MB_ICONEXCLAMATION "$(WARN_WRITE_ACCESS)" - Abort ; Stay on the page - ${EndIf} - - Call CheckSpace - ${If} "$HasRequiredSpaceAvailable" == "false" - LockWindow off - MessageBox MB_OK|MB_ICONEXCLAMATION "$(WARN_DISK_SPACE)" - Abort ; Stay on the page - ${EndIf} - - System::Call "kernel32::GetTickCount()l .s" - Pop $0 - ${GetSecondsElapsed} "$StartOptionsPhaseTickCount" "$0" $OptionsPhaseSeconds - ; It is possible for this value to be 0 if the user clicks fast enough so - ; increment the value by 1 if it is 0. - ${If} $OptionsPhaseSeconds == 0 - IntOp $OptionsPhaseSeconds $OptionsPhaseSeconds + 1 - ${EndIf} - - ${NSD_GetState} $CheckboxShortcuts $CheckboxShortcuts - ${NSD_GetText} $DroplistArch $DroplistArch - ${NSD_GetState} $CheckboxSendPing $CheckboxSendPing -!ifdef MOZ_MAINTENANCE_SERVICE - ${NSD_GetState} $CheckboxInstallMaintSvc $CheckboxInstallMaintSvc -!endif - -FunctionEnd - -Function createInstall - nsDialogs::Create /NOUNLOAD 1018 - Pop $Dialog - ; Since the text color for controls is set in this Dialog the foreground and - ; background colors of the Dialog must also be hardcoded. - SetCtlColors $Dialog ${COMMON_TEXT_COLOR_NORMAL} ${COMMON_BKGRD_COLOR} - - ${NSD_CreateLabel} 0 0 49u 64u "" - Pop $0 - ${GetDlgItemWidthHeight} $0 $1 $2 - System::Call 'user32::DestroyWindow(i r0)' - - ${NSD_CreateLabel} 0 0 11u 16u "" - Pop $0 - ${GetDlgItemWidthHeight} $0 $3 $4 - System::Call 'user32::DestroyWindow(i r0)' - - FindWindow $7 "#32770" "" $HWNDPARENT - ${GetDlgItemWidthHeight} $7 $8 $9 - - ; Allow a maximum text width of half of the Dialog's width - IntOp $R0 $8 / 2 - - ${GetTextWidthHeight} "${INSTALL_BLURB1}" $FontBlurb $R0 $5 $6 - IntOp $R1 $1 + $3 - IntOp $R1 $R1 + $5 - IntOp $R1 $8 - $R1 - IntOp $R1 $R1 / 2 - ${NSD_CreateBitmap} $R1 ${INSTALL_BLURB_TOP_DU} 49u 64u "" - Pop $BitmapBlurb1 - ${SetStretchedTransparentImage} $BitmapBlurb1 $PLUGINSDIR\clock.bmp $HwndBitmapBlurb1 - IntOp $R1 $R1 + $1 - IntOp $R1 $R1 + $3 - ${NSD_CreateLabel} $R1 ${INSTALL_BLURB_TOP_DU} $5 $6 "${INSTALL_BLURB1}" - Pop $LabelBlurb1 - SendMessage $LabelBlurb1 ${WM_SETFONT} $FontBlurb 0 - SetCtlColors $LabelBlurb1 ${INSTALL_BLURB_TEXT_COLOR} transparent - - ${GetTextWidthHeight} "${INSTALL_BLURB2}" $FontBlurb $R0 $5 $6 - IntOp $R1 $1 + $3 - IntOp $R1 $R1 + $5 - IntOp $R1 $8 - $R1 - IntOp $R1 $R1 / 2 - ${NSD_CreateBitmap} $R1 ${INSTALL_BLURB_TOP_DU} 49u 64u "" - Pop $BitmapBlurb2 - ${SetStretchedTransparentImage} $BitmapBlurb2 $PLUGINSDIR\particles.bmp $HwndBitmapBlurb2 - IntOp $R1 $R1 + $1 - IntOp $R1 $R1 + $3 - ${NSD_CreateLabel} $R1 ${INSTALL_BLURB_TOP_DU} $5 $6 "${INSTALL_BLURB2}" - Pop $LabelBlurb2 - SendMessage $LabelBlurb2 ${WM_SETFONT} $FontBlurb 0 - SetCtlColors $LabelBlurb2 ${INSTALL_BLURB_TEXT_COLOR} transparent - ShowWindow $BitmapBlurb2 ${SW_HIDE} - ShowWindow $LabelBlurb2 ${SW_HIDE} - - ${GetTextWidthHeight} "${INSTALL_BLURB3}" $FontBlurb $R0 $5 $6 - IntOp $R1 $1 + $3 - IntOp $R1 $R1 + $5 - IntOp $R1 $8 - $R1 - IntOp $R1 $R1 / 2 - ${NSD_CreateBitmap} $R1 ${INSTALL_BLURB_TOP_DU} 49u 64u "" - Pop $BitmapBlurb3 - ${SetStretchedTransparentImage} $BitmapBlurb3 $PLUGINSDIR\pencil.bmp $HWndBitmapBlurb3 - IntOp $R1 $R1 + $1 - IntOp $R1 $R1 + $3 - ${NSD_CreateLabel} $R1 ${INSTALL_BLURB_TOP_DU} $5 $6 "${INSTALL_BLURB3}" - Pop $LabelBlurb3 - SendMessage $LabelBlurb3 ${WM_SETFONT} $FontBlurb 0 - SetCtlColors $LabelBlurb3 ${INSTALL_BLURB_TEXT_COLOR} transparent - ShowWindow $BitmapBlurb3 ${SW_HIDE} - ShowWindow $LabelBlurb3 ${SW_HIDE} - - ${NSD_CreateProgressBar} 103u 166u 241u 9u "" - Pop $Progressbar - ${NSD_AddStyle} $Progressbar ${PBS_MARQUEE} - SendMessage $Progressbar ${PBM_SETMARQUEE} 1 \ - $ProgressbarMarqueeIntervalMS ; start=1|stop=0 interval(ms)=+N - - ${NSD_CreateLabelCenter} 103u 180u 241u 20u "$(DOWNLOADING_LABEL)" - Pop $LabelDownloading - SendMessage $LabelDownloading ${WM_SETFONT} $FontNormal 0 - SetCtlColors $LabelDownloading ${INSTALL_PROGRESS_TEXT_COLOR_NORMAL} transparent - - ${If} ${FileExists} "$INSTDIR\${FileMainEXE}" - ${NSD_CreateLabelCenter} 103u 180u 241u 20u "$(UPGRADING_LABEL)" - ${Else} - ${NSD_CreateLabelCenter} 103u 180u 241u 20u "$(INSTALLING_LABEL)" - ${EndIf} - Pop $LabelInstalling - SendMessage $LabelInstalling ${WM_SETFONT} $FontNormal 0 - SetCtlColors $LabelInstalling ${INSTALL_PROGRESS_TEXT_COLOR_NORMAL} transparent - ShowWindow $LabelInstalling ${SW_HIDE} - - ${NSD_CreateBitmap} ${APPNAME_BMP_EDGE_DU} ${APPNAME_BMP_TOP_DU} \ - ${APPNAME_BMP_WIDTH_DU} ${APPNAME_BMP_HEIGHT_DU} "" - Pop $2 - ${SetStretchedTransparentImage} $2 $PLUGINSDIR\appname.bmp $0 - - GetDlgItem $0 $HWNDPARENT 1 ; Install button - EnableWindow $0 0 - ShowWindow $0 ${SW_HIDE} - - GetDlgItem $0 $HWNDPARENT 3 ; Back button used for Options - EnableWindow $0 0 - ShowWindow $0 ${SW_HIDE} - - GetDlgItem $0 $HWNDPARENT 2 ; Cancel button - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(CANCEL_BUTTON)" - ; Focus the Cancel button otherwise it isn't possible to tab to it since it is - ; the only control that can be tabbed to. - ${NSD_SetFocus} $0 - ; Kill the Cancel button's focus so pressing enter won't cancel the install. - SendMessage $0 ${WM_KILLFOCUS} 0 0 - - ${If} "$CanSetAsDefault" == "true" - GetDlgItem $0 $HWNDPARENT 10 ; Default browser checkbox - SendMessage $0 ${BM_GETCHECK} 0 0 $CheckboxSetAsDefault - EnableWindow $0 0 - ShowWindow $0 ${SW_HIDE} - ${EndIf} - - GetDlgItem $0 $HWNDPARENT 11 - ${If} ${FileExists} "$INSTDIR\${FileMainEXE}" - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(ONE_MOMENT_UPGRADE)" - ${Else} - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(ONE_MOMENT_INSTALL)" - ${EndIf} - SendMessage $0 ${WM_SETFONT} $FontNormal 0 - SetCtlColors $0 ${FOOTER_CONTROL_TEXT_COLOR_FADED} ${FOOTER_BKGRD_COLOR} - ShowWindow $0 ${SW_SHOW} - - ; Set $DownloadReset to true so the first download tick count is measured. - StrCpy $DownloadReset "true" - StrCpy $IsDownloadFinished "false" - StrCpy $DownloadRetryCount "0" - StrCpy $DownloadedBytes "0" - StrCpy $StartLastDownloadTickCount "" - StrCpy $EndDownloadPhaseTickCount "" - StrCpy $DownloadFirstTransferSeconds "" - StrCpy $ExitCode "${ERR_DOWNLOAD_CANCEL}" - StrCpy $OpenedDownloadPage "0" - - ClearErrors - ReadINIStr $ExistingVersion "$INSTDIR\application.ini" "App" "Version" - ${If} ${Errors} - StrCpy $ExistingVersion "0" - ${EndIf} - - ClearErrors - ReadINIStr $ExistingBuildID "$INSTDIR\application.ini" "App" "BuildID" - ${If} ${Errors} - StrCpy $ExistingBuildID "0" - ${EndIf} - - ${If} ${FileExists} "$LOCALAPPDATA\Mozilla\Basilisk" - StrCpy $ExistingProfile "1" - ${Else} - StrCpy $ExistingProfile "0" - ${EndIf} - - StrCpy $DownloadServerIP "" - - System::Call "kernel32::GetTickCount()l .s" - Pop $StartDownloadPhaseTickCount - - ${If} ${FileExists} "$INSTDIR\uninstall\uninstall.log" - StrCpy $InstallTotalSteps ${InstallPaveOverTotalSteps} - ${Else} - StrCpy $InstallTotalSteps ${InstallCleanTotalSteps} - ${EndIf} - - ${ITBL3Create} - ${ITBL3SetProgressState} "${TBPF_INDETERMINATE}" - - ${NSD_CreateTimer} StartDownload ${DownloadIntervalMS} - - LockWindow off - nsDialogs::Show - - ${NSD_FreeImage} $0 - ${NSD_FreeImage} $HwndBitmapBlurb1 - ${NSD_FreeImage} $HwndBitmapBlurb2 - ${NSD_FreeImage} $HWndBitmapBlurb3 -FunctionEnd - -Function StartDownload - ${NSD_KillTimer} StartDownload - ${If} $DroplistArch == "$(VERSION_64BIT)" - InetBgDL::Get "${URLStubDownload64}${URLStubDownloadAppend}" \ - "$PLUGINSDIR\download.exe" \ - /CONNECTTIMEOUT 120 /RECEIVETIMEOUT 120 /END - ${Else} - InetBgDL::Get "${URLStubDownload32}${URLStubDownloadAppend}" \ - "$PLUGINSDIR\download.exe" \ - /CONNECTTIMEOUT 120 /RECEIVETIMEOUT 120 /END - ${EndIf} - StrCpy $4 "" - ${NSD_CreateTimer} OnDownload ${DownloadIntervalMS} - ${If} ${FileExists} "$INSTDIR\${TO_BE_DELETED}" - RmDir /r "$INSTDIR\${TO_BE_DELETED}" - ${EndIf} -FunctionEnd - -Function SetProgressBars - SendMessage $Progressbar ${PBM_SETPOS} $ProgressCompleted 0 - ${ITBL3SetProgressValue} "$ProgressCompleted" "$ProgressTotal" -FunctionEnd - -Function RemoveFileProgressCallback - IntOp $InstallCounterStep $InstallCounterStep + 2 - System::Int64Op $ProgressCompleted + $InstallStepSize - Pop $ProgressCompleted - Call SetProgressBars - System::Int64Op $ProgressCompleted + $InstallStepSize - Pop $ProgressCompleted - Call SetProgressBars -FunctionEnd - -Function OnDownload - InetBgDL::GetStats - # $0 = HTTP status code, 0=Completed - # $1 = Completed files - # $2 = Remaining files - # $3 = Number of downloaded bytes for the current file - # $4 = Size of current file (Empty string if the size is unknown) - # /RESET must be used if status $0 > 299 (e.g. failure) - # When status is $0 =< 299 it is handled by InetBgDL - StrCpy $DownloadServerIP "$5" - ${If} $0 > 299 - ${NSD_KillTimer} OnDownload - IntOp $DownloadRetryCount $DownloadRetryCount + 1 - ${If} "$DownloadReset" != "true" - StrCpy $DownloadedBytes "0" - ${NSD_AddStyle} $Progressbar ${PBS_MARQUEE} - SendMessage $Progressbar ${PBM_SETMARQUEE} 1 \ - $ProgressbarMarqueeIntervalMS ; start=1|stop=0 interval(ms)=+N - ${ITBL3SetProgressState} "${TBPF_INDETERMINATE}" - ${EndIf} - InetBgDL::Get /RESET /END - StrCpy $DownloadSizeBytes "" - StrCpy $DownloadReset "true" - - ${If} $DownloadRetryCount >= ${DownloadMaxRetries} - StrCpy $ExitCode "${ERR_DOWNLOAD_TOO_MANY_RETRIES}" - ; Use a timer so the UI has a chance to update - ${NSD_CreateTimer} DisplayDownloadError ${InstallIntervalMS} - ${Else} - ${NSD_CreateTimer} StartDownload ${DownloadRetryIntervalMS} - ${EndIf} - Return - ${EndIf} - - ${If} "$DownloadReset" == "true" - System::Call "kernel32::GetTickCount()l .s" - Pop $StartLastDownloadTickCount - StrCpy $DownloadReset "false" - ; The seconds elapsed from the start of the download phase until the first - ; bytes are received are only recorded for the first request so it is - ; possible to determine connection issues for the first request. - ${If} "$DownloadFirstTransferSeconds" == "" - ; Get the seconds elapsed from the start of the download phase until the - ; first bytes are received. - ${GetSecondsElapsed} "$StartDownloadPhaseTickCount" "$StartLastDownloadTickCount" $DownloadFirstTransferSeconds - ${EndIf} - ${EndIf} - - ${If} "$DownloadSizeBytes" == "" - ${AndIf} "$4" != "" - ; Handle the case where the size of the file to be downloaded is less than - ; the minimum expected size or greater than the maximum expected size at the - ; beginning of the download. - ${If} $4 < ${DownloadMinSizeBytes} - ${OrIf} $4 > ${DownloadMaxSizeBytes} - ${NSD_KillTimer} OnDownload - InetBgDL::Get /RESET /END - StrCpy $DownloadReset "true" - - ${If} $DownloadRetryCount >= ${DownloadMaxRetries} - ; Use a timer so the UI has a chance to update - ${NSD_CreateTimer} DisplayDownloadError ${InstallIntervalMS} - ${Else} - ${NSD_CreateTimer} StartDownload ${DownloadIntervalMS} - ${EndIf} - Return - ${EndIf} - - StrCpy $DownloadSizeBytes "$4" - System::Int64Op $4 / 2 - Pop $HalfOfDownload - System::Int64Op $HalfOfDownload / $InstallTotalSteps - Pop $InstallStepSize - SendMessage $Progressbar ${PBM_SETMARQUEE} 0 0 ; start=1|stop=0 interval(ms)=+N - ${RemoveStyle} $Progressbar ${PBS_MARQUEE} - System::Int64Op $HalfOfDownload + $DownloadSizeBytes - Pop $ProgressTotal - StrCpy $ProgressCompleted 0 - SendMessage $Progressbar ${PBM_SETRANGE32} $ProgressCompleted $ProgressTotal - ${EndIf} - - ; Don't update the status until after the download starts - ${If} $2 != 0 - ${AndIf} "$4" == "" - Return - ${EndIf} - - ; Handle the case where the downloaded size is greater than the maximum - ; expected size during the download. - ${If} $DownloadedBytes > ${DownloadMaxSizeBytes} - InetBgDL::Get /RESET /END - StrCpy $DownloadReset "true" - - ${If} $DownloadRetryCount >= ${DownloadMaxRetries} - ; Use a timer so the UI has a chance to update - ${NSD_CreateTimer} DisplayDownloadError ${InstallIntervalMS} - ${Else} - ${NSD_CreateTimer} StartDownload ${DownloadIntervalMS} - ${EndIf} - Return - ${EndIf} - - ${If} $IsDownloadFinished != "true" - ${If} $2 == 0 - ${NSD_KillTimer} OnDownload - StrCpy $IsDownloadFinished "true" - ; The first step of the install progress bar is determined by the - ; InstallProgressFirstStep define and provides the user with immediate - ; feedback. - StrCpy $InstallCounterStep "${InstallProgressFirstStep}" - System::Call "kernel32::GetTickCount()l .s" - Pop $EndDownloadPhaseTickCount - - StrCpy $DownloadedBytes "$DownloadSizeBytes" - - ; When a download has finished handle the case where the downloaded size - ; is less than the minimum expected size or greater than the maximum - ; expected size during the download. - ${If} $DownloadedBytes < ${DownloadMinSizeBytes} - ${OrIf} $DownloadedBytes > ${DownloadMaxSizeBytes} - InetBgDL::Get /RESET /END - StrCpy $DownloadReset "true" - - ${If} $DownloadRetryCount >= ${DownloadMaxRetries} - ; Use a timer so the UI has a chance to update - ${NSD_CreateTimer} DisplayDownloadError ${InstallIntervalMS} - ${Else} - ${NSD_CreateTimer} StartDownload ${DownloadIntervalMS} - ${EndIf} - Return - ${EndIf} - - LockWindow on - ; Update the progress bars first in the UI change so they take affect - ; before other UI changes. - StrCpy $ProgressCompleted "$DownloadSizeBytes" - Call SetProgressBars - System::Int64Op $InstallStepSize * ${InstallProgressFirstStep} - Pop $R9 - System::Int64Op $ProgressCompleted + $R9 - Pop $ProgressCompleted - Call SetProgressBars - ShowWindow $LabelDownloading ${SW_HIDE} - ShowWindow $LabelInstalling ${SW_SHOW} - ShowWindow $LabelBlurb2 ${SW_HIDE} - ShowWindow $BitmapBlurb2 ${SW_HIDE} - ShowWindow $LabelBlurb3 ${SW_SHOW} - ShowWindow $BitmapBlurb3 ${SW_SHOW} - ; Disable the Cancel button during the install - GetDlgItem $5 $HWNDPARENT 2 - EnableWindow $5 0 - LockWindow off - - ; Open a handle to prevent modification of the full installer - StrCpy $R9 "${INVALID_HANDLE_VALUE}" - System::Call 'kernel32::CreateFileW(w "$PLUGINSDIR\download.exe", \ - i ${GENERIC_READ}, \ - i ${FILE_SHARE_READ}, i 0, \ - i ${OPEN_EXISTING}, i 0, i 0) i .R9' - StrCpy $HandleDownload "$R9" - - ${If} $HandleDownload == ${INVALID_HANDLE_VALUE} - StrCpy $ExitCode "${ERR_PREINSTALL_INVALID_HANDLE}" - StrCpy $0 "0" - StrCpy $1 "0" - ${Else} - CertCheck::VerifyCertTrust "$PLUGINSDIR\download.exe" - Pop $0 - CertCheck::VerifyCertNameIssuer "$PLUGINSDIR\download.exe" \ - "${CertNameDownload}" "${CertIssuerDownload}" - Pop $1 - ${If} $0 == 0 - ${AndIf} $1 == 0 - StrCpy $ExitCode "${ERR_PREINSTALL_CERT_UNTRUSTED_AND_ATTRIBUTES}" - ${ElseIf} $0 == 0 - StrCpy $ExitCode "${ERR_PREINSTALL_CERT_UNTRUSTED}" - ${ElseIf} $1 == 0 - StrCpy $ExitCode "${ERR_PREINSTALL_CERT_ATTRIBUTES}" - ${EndIf} - ${EndIf} - - System::Call "kernel32::GetTickCount()l .s" - Pop $EndPreInstallPhaseTickCount - - ${If} $0 == 0 - ${OrIf} $1 == 0 - ; Use a timer so the UI has a chance to update - ${NSD_CreateTimer} DisplayDownloadError ${InstallIntervalMS} - Return - ${EndIf} - - ; Instead of extracting the files we use the downloaded installer to - ; install in case it needs to perform operations that the stub doesn't - ; know about. - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "InstallDirectoryPath" "$INSTDIR" - ; Don't create the QuickLaunch or Taskbar shortcut from the launched installer - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "QuickLaunchShortcut" "false" - - ; Always create a start menu shortcut, so the user always has some way - ; to access the application. - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "StartMenuShortcuts" "true" - - ; Either avoid or force adding a taskbar pin and desktop shortcut - ; based on the checkbox value. - ${If} $CheckboxShortcuts == 0 - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "TaskbarShortcut" "false" - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "DesktopShortcut" "false" - ${Else} - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "TaskbarShortcut" "true" - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "DesktopShortcut" "true" - ${EndIf} - -!ifdef MOZ_MAINTENANCE_SERVICE - ${If} $CheckboxInstallMaintSvc == 1 - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "MaintenanceService" "true" - ${Else} - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "MaintenanceService" "false" - ${EndIf} -!else - WriteINIStr "$PLUGINSDIR\${CONFIG_INI}" "Install" "MaintenanceService" "false" -!endif - - ; Delete the taskbar shortcut history to ensure we do the right thing based on - ; the config file above. - ${GetShortcutsLogPath} $0 - Delete "$0" - - GetFunctionAddress $0 RemoveFileProgressCallback - ${RemovePrecompleteEntries} $0 - - ; Delete the install.log and let the full installer create it. When the - ; installer closes it we can detect that it has completed. - Delete "$INSTDIR\install.log" - - ; Delete firefox.exe.moz-upgrade and firefox.exe.moz-delete if it exists - ; since it being present will require an OS restart for the full - ; installer. - Delete "$INSTDIR\${FileMainEXE}.moz-upgrade" - Delete "$INSTDIR\${FileMainEXE}.moz-delete" - - System::Call "kernel32::GetTickCount()l .s" - Pop $EndPreInstallPhaseTickCount - - Exec "$\"$PLUGINSDIR\download.exe$\" /INI=$PLUGINSDIR\${CONFIG_INI}" - ${NSD_CreateTimer} CheckInstall ${InstallIntervalMS} - ${Else} - ${If} $HalfOfDownload != "true" - ${AndIf} $3 > $HalfOfDownload - StrCpy $HalfOfDownload "true" - LockWindow on - ShowWindow $LabelBlurb1 ${SW_HIDE} - ShowWindow $BitmapBlurb1 ${SW_HIDE} - ShowWindow $LabelBlurb2 ${SW_SHOW} - ShowWindow $BitmapBlurb2 ${SW_SHOW} - LockWindow off - ${EndIf} - StrCpy $DownloadedBytes "$3" - StrCpy $ProgressCompleted "$DownloadedBytes" - Call SetProgressBars - ${EndIf} - ${EndIf} -FunctionEnd - -Function OnPing - InetBgDL::GetStats - # $0 = HTTP status code, 0=Completed - # $1 = Completed files - # $2 = Remaining files - # $3 = Number of downloaded bytes for the current file - # $4 = Size of current file (Empty string if the size is unknown) - # /RESET must be used if status $0 > 299 (e.g. failure) - # When status is $0 =< 299 it is handled by InetBgDL - ${If} $2 == 0 - ${OrIf} $0 > 299 - ${NSD_KillTimer} OnPing - ${If} $0 > 299 - InetBgDL::Get /RESET /END - ${EndIf} - ; The following will exit the installer - SetAutoClose true - StrCpy $R9 "2" - Call RelativeGotoPage - ${EndIf} -FunctionEnd - -Function CheckInstall - IntOp $InstallCounterStep $InstallCounterStep + 1 - ${If} $InstallCounterStep >= $InstallTotalSteps - ${NSD_KillTimer} CheckInstall - ; Close the handle that prevents modification of the full installer - System::Call 'kernel32::CloseHandle(i $HandleDownload)' - StrCpy $ExitCode "${ERR_INSTALL_TIMEOUT}" - ; Use a timer so the UI has a chance to update - ${NSD_CreateTimer} DisplayDownloadError ${InstallIntervalMS} - Return - ${EndIf} - - System::Int64Op $ProgressCompleted + $InstallStepSize - Pop $ProgressCompleted - Call SetProgressBars - - ${If} ${FileExists} "$INSTDIR\install.log" - Delete "$INSTDIR\install.tmp" - CopyFiles /SILENT "$INSTDIR\install.log" "$INSTDIR\install.tmp" - - ; The unfocus and refocus that happens approximately here is caused by the - ; installer calling SHChangeNotify to refresh the shortcut icons. - - ; When the full installer completes the installation the install.log will no - ; longer be in use. - ClearErrors - Delete "$INSTDIR\install.log" - ${Unless} ${Errors} - ${NSD_KillTimer} CheckInstall - ; Close the handle that prevents modification of the full installer - System::Call 'kernel32::CloseHandle(i $HandleDownload)' - Rename "$INSTDIR\install.tmp" "$INSTDIR\install.log" - Delete "$PLUGINSDIR\download.exe" - Delete "$PLUGINSDIR\${CONFIG_INI}" - System::Call "kernel32::GetTickCount()l .s" - Pop $EndInstallPhaseTickCount - System::Int64Op $InstallStepSize * ${InstallProgressFinishStep} - Pop $InstallStepSize - ${NSD_CreateTimer} FinishInstall ${InstallIntervalMS} - ${EndUnless} - ${EndIf} -FunctionEnd - -Function FinishInstall - ; The full installer has completed but the progress bar still needs to finish - ; so increase the size of the step. - IntOp $InstallCounterStep $InstallCounterStep + ${InstallProgressFinishStep} - ${If} $InstallTotalSteps < $InstallCounterStep - StrCpy $InstallCounterStep "$InstallTotalSteps" - ${EndIf} - - ${If} $InstallTotalSteps != $InstallCounterStep - System::Int64Op $ProgressCompleted + $InstallStepSize - Pop $ProgressCompleted - Call SetProgressBars - Return - ${EndIf} - - ${NSD_KillTimer} FinishInstall - - StrCpy $ProgressCompleted "$ProgressTotal" - Call SetProgressBars - - ${If} "$CheckboxSetAsDefault" == "1" - ; NB: this code is duplicated in installer.nsi. Please keep in sync. - ; For data migration in the app, we want to know what the default browser - ; value was before we changed it. To do so, we read it here and store it - ; in our own registry key. - StrCpy $0 "" - ${If} ${AtLeastWinVista} - AppAssocReg::QueryCurrentDefault "http" "protocol" "effective" - Pop $1 - ; If the method hasn't failed, $1 will contain the progid. Check: - ${If} "$1" != "method failed" - ${AndIf} "$1" != "method not available" - ; Read the actual command from the progid - ReadRegStr $0 HKCR "$1\shell\open\command" "" - ${EndIf} - ${EndIf} - ; If using the App Association Registry didn't happen or failed, fall back - ; to the effective http default: - ${If} "$0" == "" - ReadRegStr $0 HKCR "http\shell\open\command" "" - ${EndIf} - ; If we have something other than empty string now, write the value. - ${If} "$0" != "" - ClearErrors - WriteRegStr HKCU "Software\Mozilla\Basilisk" "OldDefaultBrowserCommand" "$0" - ${EndIf} - - ${GetParameters} $0 - ClearErrors - ${GetOptions} "$0" "/UAC:" $0 - ${If} ${Errors} ; Not elevated - Call ExecSetAsDefaultAppUser - ${Else} ; Elevated - execute the function in the unelevated process - GetFunctionAddress $0 ExecSetAsDefaultAppUser - UAC::ExecCodeSegment $0 - ${EndIf} - ${EndIf} - - ${If} $CheckboxShortcuts == 1 - ${If} ${AtMostWinVista} - ClearErrors - ${GetParameters} $0 - ClearErrors - ${GetOptions} "$0" "/UAC:" $0 - ${If} ${Errors} - Call AddQuickLaunchShortcut - ${Else} - GetFunctionAddress $0 AddQuickLaunchShortcut - UAC::ExecCodeSegment $0 - ${EndIf} - ${EndIf} - ${EndIf} - - ${If} ${FileExists} "$INSTDIR\${FileMainEXE}.moz-upgrade" - Delete "$INSTDIR\${FileMainEXE}" - Rename "$INSTDIR\${FileMainEXE}.moz-upgrade" "$INSTDIR\${FileMainEXE}" - ${EndIf} - - StrCpy $ExitCode "${ERR_SUCCESS}" - - StrCpy $InstallCounterStep 0 - ${NSD_CreateTimer} FinishProgressBar ${InstallIntervalMS} -FunctionEnd - -Function FinishProgressBar - IntOp $InstallCounterStep $InstallCounterStep + 1 - - ${If} $InstallCounterStep < 10 - Return - ${EndIf} - - ${NSD_KillTimer} FinishProgressBar - - Call CopyPostSigningData - Call LaunchApp - Call SendPing -FunctionEnd - -Function OnBack - StrCpy $WasOptionsButtonClicked "1" - StrCpy $R9 "1" ; Goto the next page - Call RelativeGotoPage - ; The call to Abort prevents NSIS from trying to move to the previous or the - ; next page. - Abort -FunctionEnd - -Function RelativeGotoPage - IntCmp $R9 0 0 Move Move - StrCmp $R9 "X" 0 Move - StrCpy $R9 "120" - - Move: - SendMessage $HWNDPARENT "0x408" "$R9" "" -FunctionEnd - -Function UpdateFreeSpaceLabel - ; Only update when $ExistingTopDir isn't set - ${If} "$ExistingTopDir" != "" - StrLen $5 "$ExistingTopDir" - StrLen $6 "$INSTDIR" - ${If} $5 <= $6 - StrCpy $7 "$INSTDIR" $5 - ${If} "$7" == "$ExistingTopDir" - Return - ${EndIf} - ${EndIf} - ${EndIf} - - Call CheckSpace - - StrCpy $0 "$SpaceAvailableBytes" - - StrCpy $1 "$(BYTE)" - - ${If} $0 > 1024 - ${OrIf} $0 < 0 - System::Int64Op $0 / 1024 - Pop $0 - StrCpy $1 "$(KILO)$(BYTE)" - ${If} $0 > 1024 - ${OrIf} $0 < 0 - System::Int64Op $0 / 1024 - Pop $0 - StrCpy $1 "$(MEGA)$(BYTE)" - ${If} $0 > 1024 - ${OrIf} $0 < 0 - System::Int64Op $0 / 1024 - Pop $0 - StrCpy $1 "$(GIGA)$(BYTE)" - ${EndIf} - ${EndIf} - ${EndIf} - - SendMessage $LabelFreeSpace ${WM_SETTEXT} 0 "STR:$0 $1" -FunctionEnd - -Function OnChange_DirRequest - Pop $0 - System::Call 'user32::GetWindowTextW(i $DirRequest, w .r0, i ${NSIS_MAX_STRLEN})' - StrCpy $1 "$0" 1 ; the first character - ${If} "$1" == "$\"" - StrCpy $1 "$0" "" -1 ; the last character - ${If} "$1" == "$\"" - StrCpy $0 "$0" "" 1 ; all but the first character - StrCpy $0 "$0" -1 ; all but the last character - ${EndIf} - ${EndIf} - - StrCpy $INSTDIR "$0" - Call UpdateFreeSpaceLabel - - GetDlgItem $0 $HWNDPARENT 1 ; Install button - ${If} ${FileExists} "$INSTDIR\${FileMainEXE}" - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(UPGRADE_BUTTON)" - ${Else} - SendMessage $0 ${WM_SETTEXT} 0 "STR:$(INSTALL_BUTTON)" - ${EndIf} -FunctionEnd - -Function OnClick_ButtonBrowse - StrCpy $0 "$INSTDIR" - nsDialogs::SelectFolderDialog /NOUNLOAD "$(SELECT_FOLDER_TEXT)" $0 - Pop $0 - ${If} $0 == "error" ; returns 'error' if 'cancel' was pressed? - Return - ${EndIf} - - ${If} $0 != "" - StrCpy $INSTDIR "$0" - System::Call 'user32::SetWindowTextW(i $DirRequest, w "$INSTDIR")' - ${EndIf} -FunctionEnd - -Function OnChange_DroplistArch - ; When the user changes the 32/64-bit setting, change the default install path - ; to use the correct version of Program Files. But only do that if the user - ; hasn't selected their own install path yet, and if we didn't select our - ; default as the location of an existing install. - ${If} $INSTDIR == $InitialInstallDir - ${NSD_GetText} $DroplistArch $0 - ${If} $0 == "$(VERSION_32BIT)" - ${If} $PreviousInstallArch == 32 - StrCpy $InitialInstallDir $PreviousInstallDir - ${Else} - StrCpy $InitialInstallDir "${DefaultInstDir32bit}" - ${EndIf} - ${Else} - ${If} $PreviousInstallArch == 64 - StrCpy $InitialInstallDir $PreviousInstallDir - ${Else} - StrCpy $InitialInstallDir "${DefaultInstDir64bit}" - ${EndIf} - ${EndIf} - ${NSD_SetText} $DirRequest $InitialInstallDir - ${EndIf} -FunctionEnd - -Function CheckSpace - ${If} "$ExistingTopDir" != "" - StrLen $0 "$ExistingTopDir" - StrLen $1 "$INSTDIR" - ${If} $0 <= $1 - StrCpy $2 "$INSTDIR" $3 - ${If} "$2" == "$ExistingTopDir" - Return - ${EndIf} - ${EndIf} - ${EndIf} - - StrCpy $ExistingTopDir "$INSTDIR" - ${DoUntil} ${FileExists} "$ExistingTopDir" - ${GetParent} "$ExistingTopDir" $ExistingTopDir - ${If} "$ExistingTopDir" == "" - StrCpy $SpaceAvailableBytes "0" - StrCpy $HasRequiredSpaceAvailable "false" - Return - ${EndIf} - ${Loop} - - ${GetLongPath} "$ExistingTopDir" $ExistingTopDir - - ; GetDiskFreeSpaceExW requires a backslash. - StrCpy $0 "$ExistingTopDir" "" -1 ; the last character - ${If} "$0" != "\" - StrCpy $0 "\" - ${Else} - StrCpy $0 "" - ${EndIf} - - System::Call 'kernel32::GetDiskFreeSpaceExW(w, *l, *l, *l) i("$ExistingTopDir$0", .r1, .r2, .r3) .' - StrCpy $SpaceAvailableBytes "$1" - - System::Int64Op $SpaceAvailableBytes / 1048576 - Pop $1 - System::Int64Op $1 > ${APPROXIMATE_REQUIRED_SPACE_MB} - Pop $1 - ${If} $1 == 1 - StrCpy $HasRequiredSpaceAvailable "true" - ${Else} - StrCpy $HasRequiredSpaceAvailable "false" - ${EndIf} -FunctionEnd - -Function CanWrite - StrCpy $CanWriteToInstallDir "false" - - StrCpy $0 "$INSTDIR" - ; Use the existing directory when it exists - ${Unless} ${FileExists} "$INSTDIR" - ; Get the topmost directory that exists for new installs - ${DoUntil} ${FileExists} "$0" - ${GetParent} "$0" $0 - ${If} "$0" == "" - Return - ${EndIf} - ${Loop} - ${EndUnless} - - GetTempFileName $2 "$0" - Delete $2 - CreateDirectory "$2" - - ${If} ${FileExists} "$2" - ${If} ${FileExists} "$INSTDIR" - GetTempFileName $3 "$INSTDIR" - ${Else} - GetTempFileName $3 "$2" - ${EndIf} - ${If} ${FileExists} "$3" - Delete "$3" - StrCpy $CanWriteToInstallDir "true" - ${EndIf} - RmDir "$2" - ${EndIf} -FunctionEnd - -Function AddQuickLaunchShortcut - CreateShortCut "$QUICKLAUNCH\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" - ${If} ${FileExists} "$QUICKLAUNCH\${BrandFullName}.lnk" - ShellLink::SetShortCutWorkingDirectory "$QUICKLAUNCH\${BrandFullName}.lnk" \ - "$INSTDIR" - ${EndIf} -FunctionEnd - -Function ExecSetAsDefaultAppUser - ; Using the helper.exe lessens the stub installer size. - ; This could ask for elevatation when the user doesn't install as admin. - Exec "$\"$INSTDIR\uninstall\helper.exe$\" /SetAsDefaultAppUser" -FunctionEnd - -Function LaunchApp -!ifndef DEV_EDITION - FindWindow $0 "${WindowClass}" - ${If} $0 <> 0 ; integer comparison - StrCpy $BasiliskLaunchCode "1" - MessageBox MB_OK|MB_ICONQUESTION "$(WARN_MANUALLY_CLOSE_APP_LAUNCH)" - Return - ${EndIf} -!endif - - StrCpy $BasiliskLaunchCode "2" - - ; Set the current working directory to the installation directory - SetOutPath "$INSTDIR" - ClearErrors - ${GetParameters} $0 - ${GetOptions} "$0" "/UAC:" $1 - ${If} ${Errors} - Exec "$\"$INSTDIR\${FileMainEXE}$\"" - ${Else} - GetFunctionAddress $0 LaunchAppFromElevatedProcess - UAC::ExecCodeSegment $0 - ${EndIf} -FunctionEnd - -Function LaunchAppFromElevatedProcess - ; Find the installation directory when launching using GetFunctionAddress - ; from an elevated installer since $INSTDIR will not be set in this installer - ${StrFilter} "${FileMainEXE}" "+" "" "" $R9 - ReadRegStr $0 HKLM "Software\Clients\StartMenuInternet\$R9\DefaultIcon" "" - ${GetPathFromString} "$0" $0 - ; Set the current working directory to the installation directory - ${GetParent} "$0" $1 - SetOutPath "$1" - Exec "$\"$0$\"" -FunctionEnd - -Function CopyPostSigningData - ${LineRead} "$EXEDIR\postSigningData" "1" $PostSigningData - ${If} ${Errors} - ClearErrors - StrCpy $PostSigningData "0" - ${Else} - CreateDirectory "$LOCALAPPDATA\Mozilla\Basilisk" - CopyFiles /SILENT "$EXEDIR\postSigningData" "$LOCALAPPDATA\Mozilla\Basilisk" - ${Endif} -FunctionEnd - -Function DisplayDownloadError - ${NSD_KillTimer} DisplayDownloadError - ; To better display the error state on the taskbar set the progress completed - ; value to the total value. - ${ITBL3SetProgressValue} "100" "100" - ${ITBL3SetProgressState} "${TBPF_ERROR}" - MessageBox MB_OKCANCEL|MB_ICONSTOP "$(ERROR_DOWNLOAD)" IDCANCEL +2 IDOK +1 - StrCpy $OpenedDownloadPage "1" ; Already initialized to 0 - - ${If} "$OpenedDownloadPage" == "1" - ClearErrors - ${GetParameters} $0 - ${GetOptions} "$0" "/UAC:" $1 - ${If} ${Errors} - Call OpenManualDownloadURL - ${Else} - GetFunctionAddress $0 OpenManualDownloadURL - UAC::ExecCodeSegment $0 - ${EndIf} - ${EndIf} - - Call SendPing -FunctionEnd - -Function OpenManualDownloadURL - ExecShell "open" "${URLManualDownload}${URLManualDownloadAppend}" -FunctionEnd - -Section -SectionEnd diff --git a/application/basilisk/installer/windows/nsis/uninstaller.nsi b/application/basilisk/installer/windows/nsis/uninstaller.nsi deleted file mode 100644 index 66e60d4b4..000000000 --- a/application/basilisk/installer/windows/nsis/uninstaller.nsi +++ /dev/null @@ -1,636 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -# Required Plugins: -# AppAssocReg http://nsis.sourceforge.net/Application_Association_Registration_plug-in -# CityHash http://dxr.mozilla.org/mozilla-central/source/other-licenses/nsis/Contrib/CityHash -# ShellLink http://nsis.sourceforge.net/ShellLink_plug-in -# UAC http://nsis.sourceforge.net/UAC_plug-in - -; Set verbosity to 3 (e.g. no script) to lessen the noise in the build logs -!verbose 3 - -; 7-Zip provides better compression than the lzma from NSIS so we add the files -; uncompressed and use 7-Zip to create a SFX archive of it -SetDatablockOptimize on -SetCompress off -CRCCheck on - -RequestExecutionLevel user - -; The commands inside this ifdef require NSIS 3.0a2 or greater so the ifdef can -; be removed after we require NSIS 3.0a2 or greater. -!ifdef NSIS_PACKEDVERSION - Unicode true - ManifestSupportedOS all - ManifestDPIAware true -!endif - -!addplugindir ./ - -; On Vista and above attempt to elevate Standard Users in addition to users that -; are a member of the Administrators group. -!define NONADMIN_ELEVATE - -; prevents compiling of the reg write logging. -!define NO_LOG - -!define MaintUninstallKey \ - "Software\Microsoft\Windows\CurrentVersion\Uninstall\MozillaMaintenanceService" - -Var TmpVal -Var MaintCertKey - -; Other included files may depend upon these includes! -; The following includes are provided by NSIS. -!include FileFunc.nsh -!include LogicLib.nsh -!include MUI.nsh -!include WinMessages.nsh -!include WinVer.nsh -!include WordFunc.nsh - -!insertmacro GetSize -!insertmacro StrFilter -!insertmacro WordReplace - -!insertmacro un.GetParent - -; The following includes are custom. -!include branding.nsi -!include defines.nsi -!include common.nsh -!include locales.nsi - -; This is named BrandShortName helper because we use this for software update -; post update cleanup. -VIAddVersionKey "FileDescription" "${BrandShortName} Helper" -VIAddVersionKey "OriginalFilename" "helper.exe" - -!insertmacro AddDisabledDDEHandlerValues -!insertmacro CleanVirtualStore -!insertmacro ElevateUAC -!insertmacro GetLongPath -!insertmacro GetPathFromString -!insertmacro InitHashAppModelId -!insertmacro IsHandlerForInstallDir -!insertmacro IsPinnedToTaskBar -!insertmacro IsUserAdmin -!insertmacro LogDesktopShortcut -!insertmacro LogQuickLaunchShortcut -!insertmacro LogStartMenuShortcut -!insertmacro PinnedToStartMenuLnkCount -!insertmacro RegCleanAppHandler -!insertmacro RegCleanMain -!insertmacro RegCleanUninstall -!insertmacro SetAppLSPCategories -!insertmacro SetBrandNameVars -!insertmacro UpdateShortcutAppModelIDs -!insertmacro UnloadUAC -!insertmacro WriteRegDWORD2 -!insertmacro WriteRegStr2 - -!insertmacro un.ChangeMUIHeaderImage -!insertmacro un.CheckForFilesInUse -!insertmacro un.CleanUpdateDirectories -!insertmacro un.CleanVirtualStore -!insertmacro un.DeleteShortcuts -!insertmacro un.GetLongPath -!insertmacro un.GetSecondInstallPath -!insertmacro un.InitHashAppModelId -!insertmacro un.ManualCloseAppPrompt -!insertmacro un.RegCleanAppHandler -!insertmacro un.RegCleanFileHandler -!insertmacro un.RegCleanMain -!insertmacro un.RegCleanUninstall -!insertmacro un.RegCleanProtocolHandler -!insertmacro un.RemoveQuotesFromPath -!insertmacro un.RemovePrecompleteEntries -!insertmacro un.SetAppLSPCategories -!insertmacro un.SetBrandNameVars - -!include shared.nsh - -; Helper macros for ui callbacks. Insert these after shared.nsh -!insertmacro OnEndCommon -!insertmacro UninstallOnInitCommon - -!insertmacro un.OnEndCommon -!insertmacro un.UninstallUnOnInitCommon - -Name "${BrandFullName}" -OutFile "helper.exe" -!ifdef HAVE_64BIT_BUILD - InstallDir "$PROGRAMFILES64\${BrandFullName}\" -!else - InstallDir "$PROGRAMFILES32\${BrandFullName}\" -!endif -ShowUnInstDetails nevershow - -################################################################################ -# Modern User Interface - MUI - -!define MUI_ABORTWARNING -!define MUI_ICON setup.ico -!define MUI_UNICON setup.ico -!define MUI_WELCOMEPAGE_TITLE_3LINES -!define MUI_HEADERIMAGE -!define MUI_HEADERIMAGE_RIGHT -!define MUI_UNWELCOMEFINISHPAGE_BITMAP wizWatermark.bmp - -; Use a right to left header image when the language is right to left -!ifdef ${AB_CD}_rtl -!define MUI_HEADERIMAGE_BITMAP_RTL wizHeaderRTL.bmp -!else -!define MUI_HEADERIMAGE_BITMAP wizHeader.bmp -!endif - -/** - * Uninstall Pages - */ -; Welcome Page -!define MUI_PAGE_CUSTOMFUNCTION_PRE un.preWelcome -!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.leaveWelcome -!insertmacro MUI_UNPAGE_WELCOME - -; Custom Uninstall Confirm Page -UninstPage custom un.preConfirm - -; Remove Files Page -!insertmacro MUI_UNPAGE_INSTFILES - -; Finish Page - -!insertmacro MUI_UNPAGE_FINISH - -; Use the default dialog for IDD_VERIFY for a simple Banner -ChangeUI IDD_VERIFY "${NSISDIR}\Contrib\UIs\default.exe" - -################################################################################ -# Helper Functions - -; This function is used to uninstall the maintenance service if the -; application currently being uninstalled is the last application to use the -; maintenance service. -Function un.UninstallServiceIfNotUsed - ; $0 will store if a subkey exists - ; $1 will store the first subkey if it exists or an empty string if it doesn't - ; Backup the old values - Push $0 - Push $1 - - ; The maintenance service always uses the 64-bit registry on x64 systems - ${If} ${RunningX64} - SetRegView 64 - ${EndIf} - - ; Figure out the number of subkeys - StrCpy $0 0 - ${Do} - EnumRegKey $1 HKLM "Software\Mozilla\MaintenanceService" $0 - ${If} "$1" == "" - ${ExitDo} - ${EndIf} - IntOp $0 $0 + 1 - ${Loop} - - ; Restore back the registry view - ${If} ${RunningX64} - SetRegView lastUsed - ${EndIf} - ${If} $0 == 0 - ; Get the path of the maintenance service uninstaller. - ; Look in both the 32-bit and 64-bit registry views. - SetRegView 32 - ReadRegStr $1 HKLM ${MaintUninstallKey} "UninstallString" - SetRegView lastused - - ${If} $1 == "" - ${AndIf} ${RunningX64} - SetRegView 64 - ReadRegStr $1 HKLM ${MaintUninstallKey} "UninstallString" - SetRegView lastused - ${EndIf} - - ; If the uninstall string does not exist, skip executing it - ${If} $1 != "" - ; $1 is already a quoted string pointing to the install path - ; so we're already protected against paths with spaces - nsExec::Exec "$1 /S" - ${EndIf} - ${EndIf} - - ; Restore the old value of $1 and $0 - Pop $1 - Pop $0 -FunctionEnd - -################################################################################ -# Install Sections -; Empty section required for the installer to compile as an uninstaller -Section "" -SectionEnd - -################################################################################ -# Uninstall Sections - -Section "Uninstall" - SetDetailsPrint textonly - DetailPrint $(STATUS_UNINSTALL_MAIN) - SetDetailsPrint none - - ; Delete the app exe to prevent launching the app while we are uninstalling. - ClearErrors - ${DeleteFile} "$INSTDIR\${FileMainEXE}" - ${If} ${Errors} - ; If the user closed the application it can take several seconds for it to - ; shut down completely. If the application is being used by another user we - ; can still delete the files when the system is restarted. - Sleep 5000 - ${DeleteFile} "$INSTDIR\${FileMainEXE}" - ClearErrors - ${EndIf} - - ; setup the application model id registration value - ${un.InitHashAppModelId} "$INSTDIR" "Software\Mozilla\${AppName}\TaskBarIDs" - - SetShellVarContext current ; Set SHCTX to HKCU - ${un.RegCleanMain} "Software\Mozilla" - ${un.RegCleanUninstall} - ${un.DeleteShortcuts} - - ; Unregister resources associated with Win7 taskbar jump lists. - ${If} ${AtLeastWin7} - ${AndIf} "$AppUserModelID" != "" - ApplicationID::UninstallJumpLists "$AppUserModelID" - ${EndIf} - - ; Remove the updates directory for Vista and above - ${un.CleanUpdateDirectories} "Mozilla\Basilisk" "Mozilla\updates" - - ; Remove any app model id's stored in the registry for this install path - DeleteRegValue HKCU "Software\Mozilla\${AppName}\TaskBarIDs" "$INSTDIR" - DeleteRegValue HKLM "Software\Mozilla\${AppName}\TaskBarIDs" "$INSTDIR" - - ClearErrors - WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test" - ${If} ${Errors} - StrCpy $TmpVal "HKCU" ; used primarily for logging - ${Else} - SetShellVarContext all ; Set SHCTX to HKLM - DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" - StrCpy $TmpVal "HKLM" ; used primarily for logging - ${un.RegCleanMain} "Software\Mozilla" - ${un.RegCleanUninstall} - ${un.DeleteShortcuts} - ${un.SetAppLSPCategories} - ${EndIf} - - ${un.RegCleanAppHandler} "BasiliskURL" - ${un.RegCleanAppHandler} "BasiliskHTML" - ${un.RegCleanProtocolHandler} "ftp" - ${un.RegCleanProtocolHandler} "http" - ${un.RegCleanProtocolHandler} "https" - - ClearErrors - ReadRegStr $R9 HKCR "BasiliskHTML" "" - ; Don't clean up the file handlers if the BasiliskHTML key still exists since - ; there should be a second installation that may be the default file handler - ${If} ${Errors} - ${un.RegCleanFileHandler} ".htm" "BasiliskHTML" - ${un.RegCleanFileHandler} ".html" "BasiliskHTML" - ${un.RegCleanFileHandler} ".shtml" "BasiliskHTML" - ${un.RegCleanFileHandler} ".xht" "BasiliskHTML" - ${un.RegCleanFileHandler} ".xhtml" "BasiliskHTML" - ${un.RegCleanFileHandler} ".oga" "BasiliskHTML" - ${un.RegCleanFileHandler} ".ogg" "BasiliskHTML" - ${un.RegCleanFileHandler} ".ogv" "BasiliskHTML" - ${un.RegCleanFileHandler} ".pdf" "BasiliskHTML" - ${un.RegCleanFileHandler} ".webm" "BasiliskHTML" - ${EndIf} - - SetShellVarContext all ; Set SHCTX to HKLM - ${un.GetSecondInstallPath} "Software\Mozilla" $R9 - ${If} $R9 == "false" - SetShellVarContext current ; Set SHCTX to HKCU - ${un.GetSecondInstallPath} "Software\Mozilla" $R9 - ${EndIf} - - StrCpy $0 "Software\Clients\StartMenuInternet\${FileMainEXE}\shell\open\command" - ReadRegStr $R1 HKLM "$0" "" - ${un.RemoveQuotesFromPath} "$R1" $R1 - ${un.GetParent} "$R1" $R1 - - ; Only remove the StartMenuInternet key if it refers to this install location. - ; The StartMenuInternet registry key is independent of the default browser - ; settings. The XPInstall base un-installer always removes this key if it is - ; uninstalling the default browser and it will always replace the keys when - ; installing even if there is another install of Basilisk that is set as the - ; default browser. Now the key is always updated on install but it is only - ; removed if it refers to this install location. - ${If} "$INSTDIR" == "$R1" - DeleteRegKey HKLM "Software\Clients\StartMenuInternet\${FileMainEXE}" - DeleteRegValue HKLM "Software\RegisteredApplications" "${AppRegName}" - ${EndIf} - - ReadRegStr $R1 HKCU "$0" "" - ${un.RemoveQuotesFromPath} "$R1" $R1 - ${un.GetParent} "$R1" $R1 - - ; Only remove the StartMenuInternet key if it refers to this install location. - ; The StartMenuInternet registry key is independent of the default browser - ; settings. The XPInstall base un-installer always removes this key if it is - ; uninstalling the default browser and it will always replace the keys when - ; installing even if there is another install of Basilisk that is set as the - ; default browser. Now the key is always updated on install but it is only - ; removed if it refers to this install location. - ${If} "$INSTDIR" == "$R1" - DeleteRegKey HKCU "Software\Clients\StartMenuInternet\${FileMainEXE}" - DeleteRegValue HKCU "Software\RegisteredApplications" "${AppRegName}" - ${EndIf} - - StrCpy $0 "Software\Microsoft\Windows\CurrentVersion\App Paths\${FileMainEXE}" - ${If} $R9 == "false" - DeleteRegKey HKLM "$0" - DeleteRegKey HKCU "$0" - StrCpy $0 "Software\Microsoft\MediaPlayer\ShimInclusionList\${FileMainEXE}" - DeleteRegKey HKLM "$0" - DeleteRegKey HKCU "$0" - StrCpy $0 "Software\Microsoft\MediaPlayer\ShimInclusionList\plugin-container.exe" - DeleteRegKey HKLM "$0" - DeleteRegKey HKCU "$0" - StrCpy $0 "Software\Classes\MIME\Database\Content Type\application/x-xpinstall;app=Basilisk" - DeleteRegKey HKLM "$0" - DeleteRegKey HKCU "$0" - ${Else} - ReadRegStr $R1 HKLM "$0" "" - ${un.RemoveQuotesFromPath} "$R1" $R1 - ${un.GetParent} "$R1" $R1 - ${If} "$INSTDIR" == "$R1" - WriteRegStr HKLM "$0" "" "$R9" - ${un.GetParent} "$R9" $R1 - WriteRegStr HKLM "$0" "Path" "$R1" - ${EndIf} - ${EndIf} - - ; Remove directories and files we always control before parsing the uninstall - ; log so empty directories can be removed. - ${If} ${FileExists} "$INSTDIR\updates" - RmDir /r /REBOOTOK "$INSTDIR\updates" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\updated" - RmDir /r /REBOOTOK "$INSTDIR\updated" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\defaults\shortcuts" - RmDir /r /REBOOTOK "$INSTDIR\defaults\shortcuts" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\distribution" - RmDir /r /REBOOTOK "$INSTDIR\distribution" - ${EndIf} - - ; Remove files that may be left behind by the application in the - ; VirtualStore directory. - ${un.CleanVirtualStore} - - ; Only unregister the dll if the registration points to this installation - ReadRegStr $R1 HKCR "CLSID\{0D68D6D0-D93D-4D08-A30D-F00DD1F45B24}\InProcServer32" "" - ${If} "$INSTDIR\AccessibleMarshal.dll" == "$R1" - ${UnregisterDLL} "$INSTDIR\AccessibleMarshal.dll" - ${EndIf} - - ${un.RemovePrecompleteEntries} "false" - - ${If} ${FileExists} "$INSTDIR\defaults\pref\channel-prefs.js" - Delete /REBOOTOK "$INSTDIR\defaults\pref\channel-prefs.js" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\defaults\pref" - RmDir /REBOOTOK "$INSTDIR\defaults\pref" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\defaults" - RmDir /REBOOTOK "$INSTDIR\defaults" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\uninstall" - ; Remove the uninstall directory that we control - RmDir /r /REBOOTOK "$INSTDIR\uninstall" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\install.log" - Delete /REBOOTOK "$INSTDIR\install.log" - ${EndIf} - ${If} ${FileExists} "$INSTDIR\update-settings.ini" - Delete /REBOOTOK "$INSTDIR\update-settings.ini" - ${EndIf} - - ; Explicitly remove empty webapprt dir in case it exists (bug 757978). - RmDir "$INSTDIR\webapprt\components" - RmDir "$INSTDIR\webapprt" - - ; Remove the installation directory if it is empty - RmDir "$INSTDIR" - - ; If Basilisk.exe was successfully deleted yet we still need to restart to - ; remove other files create a dummy Basilisk.exe.moz-delete to prevent the - ; installer from allowing an install without restart when it is required - ; to complete an uninstall. - ${If} ${RebootFlag} - ; Admin is required to delete files on reboot so only add the moz-delete if - ; the user is an admin. After calling UAC::IsAdmin $0 will equal 1 if the - ; user is an admin. - UAC::IsAdmin - ${If} "$0" == "1" - ${Unless} ${FileExists} "$INSTDIR\${FileMainEXE}.moz-delete" - FileOpen $0 "$INSTDIR\${FileMainEXE}.moz-delete" w - FileWrite $0 "Will be deleted on restart" - Delete /REBOOTOK "$INSTDIR\${FileMainEXE}.moz-delete" - FileClose $0 - ${EndUnless} - ${EndIf} - ${EndIf} - - ; Refresh desktop icons otherwise the start menu internet item won't be - ; removed and other ugly things will happen like recreation of the app's - ; clients registry key by the OS under some conditions. - System::Call "shell32::SHChangeNotify(i ${SHCNE_ASSOCCHANGED}, i 0, i 0, i 0)" - - ; Users who uninstall then reinstall expecting Basilisk to use a clean profile - ; may be surprised during first-run. This key is checked during startup of Basilisk and - ; subsequently deleted after checking. If the value is found during startup - ; the browser will offer to Reset Basilisk. We use the UpdateChannel to match - ; uninstalls of Basilisk-release with reinstalls of Basilisk-release, for example. - WriteRegStr HKCU "Software\Mozilla\Basilisk" "Uninstalled-${UpdateChannel}" "True" - -!ifdef MOZ_MAINTENANCE_SERVICE - ; Get the path the allowed cert is at and remove it - ; Keep this block of code last since it modfies the reg view - ServicesHelper::PathToUniqueRegistryPath "$INSTDIR" - Pop $MaintCertKey - ${If} $MaintCertKey != "" - ; Always use the 64bit registry for certs on 64bit systems. - ${If} ${RunningX64} - SetRegView 64 - ${EndIf} - DeleteRegKey HKLM "$MaintCertKey" - ${If} ${RunningX64} - SetRegView lastused - ${EndIf} - ${EndIf} - Call un.UninstallServiceIfNotUsed -!endif - - ${un.IsFirewallSvcRunning} - Pop $0 - ${If} "$0" == "true" - liteFirewallW::RemoveRule "$INSTDIR\${FileMainEXE}" "${BrandShortName} ($INSTDIR)" - ${EndIf} -SectionEnd - -################################################################################ -# Language - -!insertmacro MOZ_MUI_LANGUAGE 'baseLocale' -!verbose push -!verbose 3 -!include "overrideLocale.nsh" -!include "customLocale.nsh" -!verbose pop - -; Set this after the locale files to override it if it is in the locale. Using -; " " for BrandingText will hide the "Nullsoft Install System..." branding. -BrandingText " " - -################################################################################ -# Page pre, show, and leave functions - -Function un.preWelcome - ${If} ${FileExists} "$INSTDIR\distribution\modern-wizard.bmp" - Delete "$PLUGINSDIR\modern-wizard.bmp" - CopyFiles /SILENT "$INSTDIR\distribution\modern-wizard.bmp" "$PLUGINSDIR\modern-wizard.bmp" - ${EndIf} -FunctionEnd - -Function un.leaveWelcome - ${If} ${FileExists} "$INSTDIR\${FileMainEXE}" - Banner::show /NOUNLOAD "$(BANNER_CHECK_EXISTING)" - - ; If the message window has been found previously give the app an additional - ; five seconds to close. - ${If} "$TmpVal" == "FoundMessageWindow" - Sleep 5000 - ${EndIf} - - ${PushFilesToCheck} - - ${un.CheckForFilesInUse} $TmpVal - - Banner::destroy - - ; If there are files in use $TmpVal will be "true" - ${If} "$TmpVal" == "true" - ; If the message window is found the call to ManualCloseAppPrompt will - ; abort leaving the value of $TmpVal set to "FoundMessageWindow". - StrCpy $TmpVal "FoundMessageWindow" - ${un.ManualCloseAppPrompt} "${WindowClass}" "$(WARN_MANUALLY_CLOSE_APP_UNINSTALL)" - ; If the message window is not found set $TmpVal to "true" so the restart - ; required message is displayed. - StrCpy $TmpVal "true" - ${EndIf} - ${EndIf} -FunctionEnd - -Function un.preConfirm - ${If} ${FileExists} "$INSTDIR\distribution\modern-header.bmp" - ${AndIf} $hHeaderBitmap == "" - Delete "$PLUGINSDIR\modern-header.bmp" - CopyFiles /SILENT "$INSTDIR\distribution\modern-header.bmp" "$PLUGINSDIR\modern-header.bmp" - ${un.ChangeMUIHeaderImage} "$PLUGINSDIR\modern-header.bmp" - ${EndIf} - - ; Setup the unconfirm.ini file for the Custom Uninstall Confirm Page - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Settings" NumFields "3" - - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Type "label" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Text "$(UN_CONFIRM_UNINSTALLED_FROM)" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Left "0" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Right "-1" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Top "5" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 1" Bottom "15" - - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" Type "text" - ; The contents of this control must be set as follows in the pre function - ; ${MUI_INSTALLOPTIONS_READ} $1 "unconfirm.ini" "Field 2" "HWND" - ; SendMessage $1 ${WM_SETTEXT} 0 "STR:$INSTDIR" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" State "" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" Left "0" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" Right "-1" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" Top "17" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" Bottom "30" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 2" flags "READONLY" - - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Type "label" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Text "$(UN_CONFIRM_CLICK)" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Left "0" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Right "-1" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Top "130" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 3" Bottom "150" - - ${If} "$TmpVal" == "true" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Type "label" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Text "$(SUMMARY_REBOOT_REQUIRED_UNINSTALL)" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Left "0" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Right "-1" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Top "35" - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Field 4" Bottom "45" - - WriteINIStr "$PLUGINSDIR\unconfirm.ini" "Settings" NumFields "4" - ${EndIf} - - !insertmacro MUI_HEADER_TEXT "$(UN_CONFIRM_PAGE_TITLE)" "$(UN_CONFIRM_PAGE_SUBTITLE)" - ; The Summary custom page has a textbox that will automatically receive - ; focus. This sets the focus to the Install button instead. - !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "unconfirm.ini" - GetDlgItem $0 $HWNDPARENT 1 - System::Call "user32::SetFocus(i r0, i 0x0007, i,i)i" - ${MUI_INSTALLOPTIONS_READ} $1 "unconfirm.ini" "Field 2" "HWND" - SendMessage $1 ${WM_SETTEXT} 0 "STR:$INSTDIR" - !insertmacro MUI_INSTALLOPTIONS_SHOW -FunctionEnd - -################################################################################ -# Initialization Functions - -Function .onInit - ; Remove the current exe directory from the search order. - ; This only effects LoadLibrary calls and not implicitly loaded DLLs. - System::Call 'kernel32::SetDllDirectoryW(w "")' - - ; We need this set up for most of the helper.exe operations. - ${UninstallOnInitCommon} -FunctionEnd - -Function un.onInit - ; Remove the current exe directory from the search order. - ; This only effects LoadLibrary calls and not implicitly loaded DLLs. - System::Call 'kernel32::SetDllDirectoryW(w "")' - - StrCpy $LANGUAGE 0 - - ${un.UninstallUnOnInitCommon} - -; The commands inside this ifndef are needed prior to NSIS 3.0a2 and can be -; removed after we require NSIS 3.0a2 or greater. -!ifndef NSIS_PACKEDVERSION - ${If} ${AtLeastWinVista} - System::Call 'user32::SetProcessDPIAware()' - ${EndIf} -!endif - - !insertmacro InitInstallOptionsFile "unconfirm.ini" -FunctionEnd - -Function .onGUIEnd - ${OnEndCommon} -FunctionEnd - -Function un.onGUIEnd - ${un.OnEndCommon} -FunctionEnd diff --git a/application/basilisk/installer/windows/nsis/updater_append.ini b/application/basilisk/installer/windows/nsis/updater_append.ini deleted file mode 100644 index af7742c12..000000000 --- a/application/basilisk/installer/windows/nsis/updater_append.ini +++ /dev/null @@ -1,12 +0,0 @@ - -; IMPORTANT: This file should always start with a newline in case a locale -; provided updater.ini does not end with a newline. -; Application to launch after an update has been successfully applied. This -; must be in the same directory or a sub-directory of the directory of the -; application executable that initiated the software update. -[PostUpdateWin] -; ExeRelPath is the path to the PostUpdateWin executable relative to the -; application executable. -ExeRelPath=uninstall\helper.exe -; ExeArg is the argument to pass to the PostUpdateWin exe -ExeArg=/PostUpdate |