12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307 |
- # 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 PaleMoon 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 == "PaleMoonURL"
- ${AndIf} $9 != 0 ; We're not running in session 0
- ReadRegStr $0 HKCU "Software\Classes\PaleMoonURL\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}"
- !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}" "" "PaleMoonHTML"
- ${EndIf}
- WriteRegStr SHCTX "SOFTWARE\Classes\${FILE_TYPE}\OpenWithProgids" "PaleMoonHTML" ""
- !macroend
- !define AddAssociationIfNoneExist "!insertmacro AddAssociationIfNoneExist"
- ; Adds the protocol and file handler registry entries for making PaleMoon 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 PaleMoonHTML
- ReadRegStr $6 SHCTX "$0\.htm" ""
- ${If} "$6" != "PaleMoonHTML"
- WriteRegStr SHCTX "$0\.htm" "" "PaleMoonHTML"
- ${EndIf}
- ReadRegStr $6 SHCTX "$0\.html" ""
- ${If} "$6" != "PaleMoonHTML"
- WriteRegStr SHCTX "$0\.html" "" "PaleMoonHTML"
- ${EndIf}
- ReadRegStr $6 SHCTX "$0\.shtml" ""
- ${If} "$6" != "PaleMoonHTML"
- WriteRegStr SHCTX "$0\.shtml" "" "PaleMoonHTML"
- ${EndIf}
- ReadRegStr $6 SHCTX "$0\.xht" ""
- ${If} "$6" != "PaleMoonHTML"
- WriteRegStr SHCTX "$0\.xht" "" "PaleMoonHTML"
- ${EndIf}
- ReadRegStr $6 SHCTX "$0\.xhtml" ""
- ${If} "$6" != "PaleMoonHTML"
- WriteRegStr SHCTX "$0\.xhtml" "" "PaleMoonHTML"
- ${EndIf}
- ${AddAssociationIfNoneExist} ".oga"
- ${AddAssociationIfNoneExist} ".ogg"
- ${AddAssociationIfNoneExist} ".ogv"
- ${AddAssociationIfNoneExist} ".webm"
- ; An empty string is used for the 5th param because PaleMoonHTML is not a
- ; protocol handler
- ${AddDisabledDDEHandlerValues} "PaleMoonHTML" "$2" "$8,1" \
- "${AppRegName} HTML Document" ""
- ${AddDisabledDDEHandlerValues} "PaleMoonURL" "$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\PALEMOON.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" "PaleMoonHTML"
- WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".html" "PaleMoonHTML"
- WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".shtml" "PaleMoonHTML"
- WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".xht" "PaleMoonHTML"
- WriteRegStr ${RegKey} "$0\Capabilities\FileAssociations" ".xhtml" "PaleMoonHTML"
- WriteRegStr ${RegKey} "$0\Capabilities\StartMenu" "StartMenuInternet" "$R9"
- WriteRegStr ${RegKey} "$0\Capabilities\URLAssociations" "ftp" "PaleMoonURL"
- WriteRegStr ${RegKey} "$0\Capabilities\URLAssociations" "http" "PaleMoonURL"
- WriteRegStr ${RegKey} "$0\Capabilities\URLAssociations" "https" "PaleMoonURL"
- ; Vista Registered Application
- WriteRegStr ${RegKey} "Software\RegisteredApplications" "${AppRegName}" "$0\Capabilities"
- !macroend
- !define SetStartMenuInternet "!insertmacro SetStartMenuInternet"
- ; The IconHandler reference for PaleMoonHTML 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 PaleMoon (does not use SHCTX).
- !macro FixShellIconHandler RegKey
- ClearErrors
- ReadRegStr $1 ${RegKey} "Software\Classes\PaleMoonHTML\ShellEx\IconHandler" ""
- ${Unless} ${Errors}
- ReadRegStr $1 ${RegKey} "Software\Classes\PaleMoonHTML\DefaultIcon" ""
- ${GetLongPath} "$INSTDIR\${FileMainEXE}" $2
- ${If} "$1" != "$2,1"
- WriteRegStr ${RegKey} "Software\Classes\PaleMoonHTML\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" "GeckoVer" "${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" "Moonchild Productions" 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 PaleMoonHTML 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 PaleMoonHTML as the default
- ; value from both HKCU and HKLM if it set to PaleMoonHTML.
- ${If} "$0" == "PaleMoonHTML"
- DeleteRegValue HKCU "Software\Classes\${FILE_TYPE}" ""
- ${EndIf}
- ${If} "$1" == "PaleMoonHTML"
- DeleteRegValue HKLM "Software\Classes\${FILE_TYPE}" ""
- ${EndIf}
- ${ElseIf} "$0" == "PaleMoonHTML"
- ; Since KHCU is set to PaleMoonHTML remove PaleMoonHTML 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} ".oga"
- ${FixBadFileAssociation} ".ogg"
- ${FixBadFileAssociation} ".ogv"
- ${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} "PaleMoonHTML" $R9
- ${If} "$R9" == "true"
- ; An empty string is used for the 5th param because PaleMoonHTML is not a
- ; protocol handler.
- ${AddDisabledDDEHandlerValues} "PaleMoonHTML" "$2" "$8,1" \
- "${AppRegName} HTML Document" ""
- ${EndIf}
- ${IsHandlerForInstallDir} "PaleMoonURL" $R9
- ${If} "$R9" == "true"
- ${AddDisabledDDEHandlerValues} "PaleMoonURL" "$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"
- ; 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 palemoon.exe.
- ${RegCleanAppHandler} "gopher"
- ; Remove support for launching chrome urls from the shell during install or
- ; update if the DefaultIcon is from palemoon.exe (Bug 301073).
- ${RegCleanAppHandler} "chrome"
- ; Remove protocol handler registry keys added by the MS shim
- DeleteRegKey HKLM "Software\Classes\PaleMoon.URL"
- DeleteRegKey HKCU "Software\Classes\PaleMoon.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 PaleMoonURL.
- StrCpy $0 "Software\Microsoft\Windows\Shell\Associations\UrlAssociations\gopher"
- ReadRegStr $2 HKCU "$0\UserChoice" "Progid"
- ${If} "$2" == "PaleMoonURL"
- 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}
- ; No need to check the default on Win8 and later
- ${If} ${AtMostWin2008R2}
- ; Check if the Pale Moon 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}
- ${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
|