Bug 1675918 - Update Windows installer with taskbar updates from upstream. r=Paenglab
Differential Revision: https://phabricator.services.mozilla.com/D119528 --HG-- extra : amend_source : e53f6559be55d893911dd4c9208b2b12bfb4e86a
This commit is contained in:
Родитель
24d001ba52
Коммит
1bbab4a0b9
|
@ -107,6 +107,11 @@ VIAddVersionKey "OriginalFilename" "setup.exe"
|
||||||
!insertmacro WriteRegStr2
|
!insertmacro WriteRegStr2
|
||||||
!insertmacro WriteRegDWORD2
|
!insertmacro WriteRegDWORD2
|
||||||
|
|
||||||
|
; This needs to be inserted after InitHashAppModelId because it uses
|
||||||
|
; $AppUserModelID and the compiler can't handle using variables lexically before
|
||||||
|
; they've been declared.
|
||||||
|
!insertmacro GetInstallerRegistryPref
|
||||||
|
|
||||||
!include shared.nsh
|
!include shared.nsh
|
||||||
|
|
||||||
; Helper macros for ui callbacks. Insert these after shared.nsh
|
; Helper macros for ui callbacks. Insert these after shared.nsh
|
||||||
|
|
|
@ -3,6 +3,12 @@
|
||||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
!macro PostUpdate
|
!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)"
|
||||||
|
|
||||||
${CreateShortcutsLog}
|
${CreateShortcutsLog}
|
||||||
|
|
||||||
; Remove registry entries for non-existent apps and for apps that point to our
|
; Remove registry entries for non-existent apps and for apps that point to our
|
||||||
|
@ -16,26 +22,21 @@
|
||||||
; setup the application model id registration value
|
; setup the application model id registration value
|
||||||
${InitHashAppModelId} "$INSTDIR" "Software\Mozilla\${AppName}\TaskBarIDs"
|
${InitHashAppModelId} "$INSTDIR" "Software\Mozilla\${AppName}\TaskBarIDs"
|
||||||
|
|
||||||
; Win7 taskbar and start menu link maintenance
|
|
||||||
Call FixShortcutAppModelIDs
|
|
||||||
|
|
||||||
; Upgrade the copies of the MAPI DLL's
|
; Upgrade the copies of the MAPI DLL's
|
||||||
${UpgradeMapiDLLs}
|
${UpgradeMapiDLLs}
|
||||||
|
|
||||||
ClearErrors
|
ClearErrors
|
||||||
WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test"
|
WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test"
|
||||||
${If} ${Errors}
|
${If} ${Errors}
|
||||||
StrCpy $TmpVal "HKCU" ; used primarily for logging
|
StrCpy $TmpVal "HKCU"
|
||||||
${Else}
|
${Else}
|
||||||
SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM)
|
SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM)
|
||||||
DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
|
DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest"
|
||||||
StrCpy $TmpVal "HKLM" ; used primarily for logging
|
StrCpy $TmpVal "HKLM"
|
||||||
${RegCleanMain} "Software\Mozilla"
|
${RegCleanMain} "Software\Mozilla"
|
||||||
${RegCleanUninstall}
|
${RegCleanUninstall}
|
||||||
${UpdateProtocolHandlers}
|
${UpdateProtocolHandlers}
|
||||||
|
${SetAppLSPCategories} ${LSP_CATEGORIES}
|
||||||
; Win7 taskbar and start menu link maintenance
|
|
||||||
Call FixShortcutAppModelIDs
|
|
||||||
|
|
||||||
; Only update the Clients\Mail registry key values if they don't exist or
|
; Only update the Clients\Mail registry key values if they don't exist or
|
||||||
; this installation is the same as the one set in those keys.
|
; this installation is the same as the one set in those keys.
|
||||||
|
@ -74,28 +75,31 @@
|
||||||
${EndIf}
|
${EndIf}
|
||||||
${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.
|
|
||||||
; Do this for both shell contexts in case the user has shortcuts in multiple
|
|
||||||
; locations, then restore the previous context at the end.
|
|
||||||
${If} ${AtLeastWin8}
|
|
||||||
SetShellVarContext all
|
|
||||||
${TouchStartMenuShortcut}
|
|
||||||
SetShellVarContext current
|
|
||||||
${TouchStartMenuShortcut}
|
|
||||||
${If} $TmpVal == "HKLM"
|
|
||||||
SetShellVarContext all
|
|
||||||
${ElseIf} $TmpVal == "HKCU"
|
|
||||||
SetShellVarContext current
|
|
||||||
${EndIf}
|
|
||||||
${EndIf}
|
|
||||||
|
|
||||||
; Adds a pinned Task Bar shortcut (see MigrateTaskBarShortcut for details).
|
; Adds a pinned Task Bar shortcut (see MigrateTaskBarShortcut for details).
|
||||||
${MigrateTaskBarShortcut}
|
${MigrateTaskBarShortcut}
|
||||||
|
|
||||||
|
; Update the name/icon/AppModelID of our shortcuts as needed, then update the
|
||||||
|
; lastwritetime of the Start Menu shortcut to clear the tile icon cache.
|
||||||
|
; Do this for both shell contexts in case the user has shortcuts in multiple
|
||||||
|
; locations, then restore the previous context at the end.
|
||||||
|
SetShellVarContext all
|
||||||
|
${UpdateShortcutsBranding}
|
||||||
|
${If} ${AtLeastWin8}
|
||||||
|
${TouchStartMenuShortcut}
|
||||||
|
${EndIf}
|
||||||
|
Call FixShortcutAppModelIDs
|
||||||
|
SetShellVarContext current
|
||||||
|
${UpdateShortcutsBranding}
|
||||||
|
${If} ${AtLeastWin8}
|
||||||
|
${TouchStartMenuShortcut}
|
||||||
|
${EndIf}
|
||||||
|
Call FixShortcutAppModelIDs
|
||||||
|
${If} $TmpVal == "HKLM"
|
||||||
|
SetShellVarContext all
|
||||||
|
${ElseIf} $TmpVal == "HKCU"
|
||||||
|
SetShellVarContext current
|
||||||
|
${EndIf}
|
||||||
|
|
||||||
${RemoveDeprecatedKeys}
|
${RemoveDeprecatedKeys}
|
||||||
${Set32to64DidMigrateReg}
|
${Set32to64DidMigrateReg}
|
||||||
|
|
||||||
|
@ -106,6 +110,8 @@
|
||||||
; VirtualStore directory.
|
; VirtualStore directory.
|
||||||
${CleanVirtualStore}
|
${CleanVirtualStore}
|
||||||
|
|
||||||
|
RmDir /r /REBOOTOK "$INSTDIR\${TO_BE_DELETED}"
|
||||||
|
|
||||||
; Register AccessibleHandler.dll with COM (this requires write access to HKLM)
|
; Register AccessibleHandler.dll with COM (this requires write access to HKLM)
|
||||||
${RegisterAccessibleHandler}
|
${RegisterAccessibleHandler}
|
||||||
|
|
||||||
|
@ -163,7 +169,7 @@
|
||||||
!define PostUpdate "!insertmacro PostUpdate"
|
!define PostUpdate "!insertmacro PostUpdate"
|
||||||
|
|
||||||
; Update the last modified time on the Start Menu shortcut, so that its icon
|
; Update the last modified time on the Start Menu shortcut, so that its icon
|
||||||
; gets refreshed. Should be called on Win8+ after MigrateStartMenuShortcut.
|
; gets refreshed. Should be called on Win8+ after UpdateShortcutBranding.
|
||||||
!macro TouchStartMenuShortcut
|
!macro TouchStartMenuShortcut
|
||||||
${If} ${FileExists} "$SMPROGRAMS\${BrandFullName}.lnk"
|
${If} ${FileExists} "$SMPROGRAMS\${BrandFullName}.lnk"
|
||||||
FileOpen $0 "$SMPROGRAMS\${BrandFullName}.lnk" a
|
FileOpen $0 "$SMPROGRAMS\${BrandFullName}.lnk" a
|
||||||
|
@ -330,6 +336,51 @@
|
||||||
!macroend
|
!macroend
|
||||||
!define ShowShortcuts "!insertmacro ShowShortcuts"
|
!define ShowShortcuts "!insertmacro ShowShortcuts"
|
||||||
|
|
||||||
|
; Update the branding name on all shortcuts our installer created
|
||||||
|
; to convert from BrandFullName (which is what we used to name shortcuts)
|
||||||
|
; to BrandShortName (which is what we now name shortcuts). We only rename
|
||||||
|
; desktop and start menu shortcuts, because touching taskbar pins often
|
||||||
|
; (but inconsistently) triggers various broken behaviors in the shell.
|
||||||
|
; This assumes SHCTX is set correctly.
|
||||||
|
!macro UpdateShortcutsBranding
|
||||||
|
${UpdateOneShortcutBranding} "STARTMENU" "$SMPROGRAMS"
|
||||||
|
${UpdateOneShortcutBranding} "DESKTOP" "$DESKTOP"
|
||||||
|
!macroend
|
||||||
|
!define UpdateShortcutsBranding "!insertmacro UpdateShortcutsBranding"
|
||||||
|
|
||||||
|
!macro UpdateOneShortcutBranding LOG_SECTION SHORTCUT_DIR
|
||||||
|
; Only try to rename the shortcuts found in the shortcuts log, to avoid
|
||||||
|
; blowing away a name that the user created.
|
||||||
|
${GetLongPath} "$INSTDIR\uninstall\${SHORTCUTS_LOG}" $R9
|
||||||
|
${If} ${FileExists} "$R9"
|
||||||
|
ClearErrors
|
||||||
|
; The shortcuts log contains a numbered list of entries for each section,
|
||||||
|
; but we never actually create more than one.
|
||||||
|
ReadINIStr $R8 "$R9" "${LOG_SECTION}" "Shortcut0"
|
||||||
|
${IfNot} ${Errors}
|
||||||
|
${If} ${FileExists} "${SHORTCUT_DIR}\$R8"
|
||||||
|
ShellLink::GetShortCutTarget "${SHORTCUT_DIR}\$R8"
|
||||||
|
Pop $R7
|
||||||
|
${GetLongPath} "$R7" $R7
|
||||||
|
${If} $R7 == "$INSTDIR\${FileMainEXE}"
|
||||||
|
${AndIf} $R8 != "${BrandShortName}.lnk"
|
||||||
|
${AndIfNot} ${FileExists} "${SHORTCUT_DIR}\${BrandShortName}.lnk"
|
||||||
|
ClearErrors
|
||||||
|
Rename "${SHORTCUT_DIR}\$R8" "${SHORTCUT_DIR}\${BrandShortName}.lnk"
|
||||||
|
${IfNot} ${Errors}
|
||||||
|
; Update the shortcut log manually instead of calling LogShortcut
|
||||||
|
; because it would add a Shortcut1 entry, and we really do want to
|
||||||
|
; overwrite the existing entry 0, since we just renamed the file.
|
||||||
|
WriteINIStr "$R9" "${LOG_SECTION}" "Shortcut0" \
|
||||||
|
"${BrandShortName}.lnk"
|
||||||
|
${EndIf}
|
||||||
|
${EndIf}
|
||||||
|
${EndIf}
|
||||||
|
${EndIf}
|
||||||
|
${EndIf}
|
||||||
|
!macroend
|
||||||
|
!define UpdateOneShortcutBranding "!insertmacro UpdateOneShortcutBranding"
|
||||||
|
|
||||||
!macro SetHandlersMail
|
!macro SetHandlersMail
|
||||||
${GetLongPath} "$INSTDIR\${FileMainEXE}" $8
|
${GetLongPath} "$INSTDIR\${FileMainEXE}" $8
|
||||||
|
|
||||||
|
@ -963,21 +1014,53 @@
|
||||||
${If} ${Errors}
|
${If} ${Errors}
|
||||||
ClearErrors
|
ClearErrors
|
||||||
WriteIniStr "$0" "TASKBAR" "Migrated" "true"
|
WriteIniStr "$0" "TASKBAR" "Migrated" "true"
|
||||||
|
WriteRegDWORD HKCU \
|
||||||
|
"Software\Mozilla\${AppName}\Installer\$AppUserModelID" \
|
||||||
|
"WasPinnedToTaskbar" 1
|
||||||
${If} ${AtLeastWin7}
|
${If} ${AtLeastWin7}
|
||||||
; No need to check the default on Win8 and later
|
; If we didn't run the stub installer, AddTaskbarSC will be empty.
|
||||||
${If} ${AtMostWin2008R2}
|
; We determine whether to pin based on whether we're the default
|
||||||
; Check if the Thunderbird is the mailto handler for this user
|
; browser, or if we're on win8 or later, we always pin.
|
||||||
SetShellVarContext current ; Set SHCTX to the current user
|
${If} $AddTaskbarSC == ""
|
||||||
${IsHandlerForInstallDir} "mailto" $R9
|
; No need to check the default on Win8 and later
|
||||||
${If} $TmpVal == "HKLM"
|
${If} ${AtMostWin2008R2}
|
||||||
SetShellVarContext all ; Set SHCTX to all users
|
; Check if the Thunderbird is the mailto handler for this user
|
||||||
|
SetShellVarContext current ; Set SHCTX to the current user
|
||||||
|
${IsHandlerForInstallDir} "mailto" $R9
|
||||||
|
${If} $TmpVal == "HKLM"
|
||||||
|
SetShellVarContext all ; Set SHCTX to all users
|
||||||
|
${EndIf}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
${EndIf}
|
${If} "$R9" == "true"
|
||||||
${If} "$R9" == "true"
|
${OrIf} ${AtLeastWin8}
|
||||||
${OrIf} ${AtLeastWin8}
|
${PinToTaskBar}
|
||||||
|
${EndIf}
|
||||||
|
${ElseIf} $AddTaskbarSC == "1"
|
||||||
${PinToTaskBar}
|
${PinToTaskBar}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
${ElseIf} ${AtLeastWin10}
|
||||||
|
${GetInstallerRegistryPref} "Software\Mozilla\${AppName}" \
|
||||||
|
"installer.taskbarpin.win10.enabled" $2
|
||||||
|
${If} $2 == "true"
|
||||||
|
; On Windows 10, we may have previously tried to make a taskbar pin
|
||||||
|
; and failed because the API we tried to use was blocked by the OS.
|
||||||
|
; We have an option that works in more cases now, so we're going to try
|
||||||
|
; again, but also record that we've done so by writing a particular
|
||||||
|
; registry value, so that we don't continue to do this repeatedly.
|
||||||
|
ClearErrors
|
||||||
|
ReadRegDWORD $2 HKCU \
|
||||||
|
"Software\Mozilla\${AppName}\Installer\$AppUserModelID" \
|
||||||
|
"WasPinnedToTaskbar"
|
||||||
|
${If} ${Errors}
|
||||||
|
WriteRegDWORD HKCU \
|
||||||
|
"Software\Mozilla\${AppName}\Installer\$AppUserModelID" \
|
||||||
|
"WasPinnedToTaskbar" 1
|
||||||
|
${If} $AddTaskbarSC != "0"
|
||||||
|
${PinToTaskBar}
|
||||||
|
${EndIf}
|
||||||
|
${EndIf}
|
||||||
|
${EndIf}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
!macroend
|
!macroend
|
||||||
|
@ -1075,56 +1158,6 @@
|
||||||
!macroend
|
!macroend
|
||||||
!define PinToTaskBar "!insertmacro PinToTaskBar"
|
!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
|
; 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
|
; 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
|
; start menu directory (bug 598779). If the application's start menu directory
|
||||||
|
|
|
@ -92,6 +92,11 @@ VIAddVersionKey "OriginalFilename" "helper.exe"
|
||||||
!insertmacro WriteRegDWORD2
|
!insertmacro WriteRegDWORD2
|
||||||
!insertmacro WriteRegStr2
|
!insertmacro WriteRegStr2
|
||||||
|
|
||||||
|
; This needs to be inserted after InitHashAppModelId because it uses
|
||||||
|
; $AppUserModelID and the compiler can't handle using variables lexically before
|
||||||
|
; they've been declared.
|
||||||
|
!insertmacro GetInstallerRegistryPref
|
||||||
|
|
||||||
!insertmacro un.ChangeMUIHeaderImage
|
!insertmacro un.ChangeMUIHeaderImage
|
||||||
!insertmacro un.CheckForFilesInUse
|
!insertmacro un.CheckForFilesInUse
|
||||||
!insertmacro un.CleanUpdateDirectories
|
!insertmacro un.CleanUpdateDirectories
|
||||||
|
|
Загрузка…
Ссылка в новой задаче