diff options
Diffstat (limited to '')
-rw-r--r-- | comm/suite/installer/windows/nsis/shared.nsh | 1069 |
1 files changed, 1069 insertions, 0 deletions
diff --git a/comm/suite/installer/windows/nsis/shared.nsh b/comm/suite/installer/windows/nsis/shared.nsh new file mode 100644 index 0000000000..5830eb8411 --- /dev/null +++ b/comm/suite/installer/windows/nsis/shared.nsh @@ -0,0 +1,1069 @@ +# 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 + ${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} + + ; Win7 taskbar and start menu link maintenance + ${If} "$AppUserModelID" != "" + ${UpdateShortcutAppModelIDs} "$INSTDIR\${FileMainEXE}" "$AppUserModelID" $0 + ${EndIf} + + ; Upgrade the copies of the MAPI DLLs + ${UpgradeMapiDLLs} + + ClearErrors + WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test" + ${If} ${Errors} + StrCpy $TmpVal "HKCU" ; used primarily for logging + ${Else} + DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" + SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM) + StrCpy $TmpVal "HKLM" ; used primarily for logging + ${RegCleanMain} "Software\Mozilla" + ${RegCleanUninstall} + ${SetStartMenuInternet} + ${FixShellIconHandler} + ${SetUninstallKeys} + ${UpdateProtocolHandlers} + + ReadRegStr $0 HKLM "Software\mozilla.org\Mozilla" "CurrentVersion" + ${If} "$0" != "${GREVersion}" + WriteRegStr HKLM "Software\mozilla.org\Mozilla" "CurrentVersion" "${GREVersion}" + ${EndIf} + + ; 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. + ReadRegStr $0 HKLM "Software\Clients\Mail\${BrandFullNameInternal}\DefaultIcon" "" + ${GetPathFromString} "$0" $0 + ${GetParent} "$0" $0 + ${If} ${FileExists} "$0" + ${GetLongPath} "$0" $0 + ${EndIf} + ${If} "$0" == "$INSTDIR" + ${SetClientsMail} + ${EndIf} + + ; Only update the Clients\News registry key values if they don't exist or + ; this installation is the same as the one set in those keys. + ReadRegStr $0 HKLM "Software\Clients\News\${BrandFullNameInternal}\DefaultIcon" "" + ${GetPathFromString} "$0" $0 + ${GetParent} "$0" $0 + ${If} ${FileExists} "$0" + ${GetLongPath} "$0" $0 + ${EndIf} + ${If} "$0" == "$INSTDIR" + ${SetClientsNews} + ${EndIf} + ${EndIf} + + ${RemoveDeprecatedKeys} + ; Add Software\Mozilla\ registry entries + ${SetAppKeys} + + ${FixClassKeys} + + ; Remove files that may be left behind by the application in the + ; VirtualStore directory. + ${CleanVirtualStore} + + ${RemoveDeprecatedFiles} + + ; Register AccessibleHandler.dll with COM (this writes to HKLM) + ${RegisterAccessibleHandler} +!macroend +!define PostUpdate "!insertmacro PostUpdate" + +!macro SetAsDefaultAppUser + SetShellVarContext current + + ; It is only possible to set this installation of the application as the + ; handler for the various types if those types were added to the respective + ; HKLM\Clients registry keys. + ; http://support.microsoft.com/kb/297878 + ${GetParameters} $R0 + + ClearErrors + ${GetOptions} "$R0" "Browser" $R1 + ${Unless} ${Errors} + ${StrFilter} "${FileMainEXE}" "+" "" "" $R9 + ClearErrors + ReadRegStr $0 HKLM "Software\Clients\StartMenuInternet\$R9\DefaultIcon" "" + ${GetPathFromString} "$0" $0 + ${GetParent} "$0" $0 + ${If} ${FileExists} "$0" + ${GetLongPath} "$0" $0 + ${EndIf} + ${If} "$0" != "$INSTDIR" + DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" + ClearErrors + WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test" + ${If} ${Errors} + ; Prevent multiple elevation requests + ClearErrors + ${GetOptions} "$R0" "/UAC:" $R1 + ${Unless} ${Errors} + Quit + ${EndUnless} + ${ElevateUAC} + ${EndIf} + DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" + ${SetStartMenuInternet} + ${EndIf} + SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM) + ${FixShellIconHandler} + WriteRegStr HKCU "Software\Clients\StartMenuInternet" "" "$R9" + + ClearErrors + ReadRegStr $0 HKLM "Software\RegisteredApplications" "${AppRegName}" + ; Only register as the handler on 7 if the app registry name exists + ; under the RegisteredApplications registry key. + ${Unless} ${Errors} + AppAssocReg::SetAppAsDefaultAll "${AppRegName}" + ${EndUnless} + + SetShellVarContext current ; Set SHCTX to the current user (e.g. HKCU) + ${SetHandlersBrowser} + ${EndUnless} + + ClearErrors + ${GetOptions} "$R0" "Mail" $R1 + ${Unless} ${Errors} + ReadRegStr $0 HKLM "Software\Clients\Mail\${BrandFullNameInternal}\DefaultIcon" "" + ${GetPathFromString} "$0" $0 + ${GetParent} "$0" $0 + ${If} ${FileExists} "$0" + ${GetLongPath} "$0" $0 + ${EndIf} + ${If} "$0" != "$INSTDIR" + DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" + ClearErrors + WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test" + ${If} ${Errors} + ; Prevent multiple elevation requests + ClearErrors + ${GetOptions} "$R0" "/UAC:" $R1 + ${Unless} ${Errors} + Quit + ${EndUnless} + ${ElevateUAC} + ${EndIf} + DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" + SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM) + ${SetClientsMail} + ${EndIf} + WriteRegStr HKCU "Software\Clients\Mail" "" "${BrandFullNameInternal}" + GetFunctionAddress $0 SetAsDefaultMailAppUser + UAC::ExecCodeSegment $0 + ${EndUnless} + + ClearErrors + ${GetOptions} "$R0" "News" $R1 + ${Unless} ${Errors} + ReadRegStr $0 HKLM "Software\Clients\News\${BrandFullNameInternal}\DefaultIcon" "" + ${GetPathFromString} "$0" $0 + ${GetParent} "$0" $0 + ${If} ${FileExists} "$0" + ${GetLongPath} "$0" $0 + ${EndIf} + ${If} "$0" != "$INSTDIR" + DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" + ClearErrors + WriteRegStr HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" "Write Test" + ${If} ${Errors} + ; Prevent multiple elevation requests + ClearErrors + ${GetOptions} "$R0" "/UAC:" $R1 + ${Unless} ${Errors} + Quit + ${EndUnless} + ${ElevateUAC} + ${EndIf} + DeleteRegValue HKLM "Software\Mozilla" "${BrandShortName}InstallerTest" + SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM) + ${SetClientsNews} + ${EndIf} + WriteRegStr HKCU "Software\Clients\News" "" "${BrandFullNameInternal}" + GetFunctionAddress $0 SetAsDefaultNewsAppUser + UAC::ExecCodeSegment $0 + ${EndUnless} +!macroend +!define SetAsDefaultAppUser "!insertmacro SetAsDefaultAppUser" + +!macro SetAsDefaultAppGlobal + ${RemoveDeprecatedKeys} + SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM) + ; Make sure that the MapiProxy and the mozMapi32 dll copies exist as we will + ; use those to register as default mail app. When using a ZIP build, the DLL + ; copies might not exist yet + IfFileExists "$INSTDIR\MapiProxy_InUse.dll" +2 +1 + CopyFiles /SILENT "$INSTDIR\MapiProxy.dll" "$INSTDIR\MapiProxy_InUse.dll" + IfFileExists "$INSTDIR\mozMapi32_InUse.dll" +2 +1 + CopyFiles /SILENT "$INSTDIR\mozMapi32.dll" "$INSTDIR\mozMapi32_InUse.dll" + + ${SetHandlersBrowser} + ${SetHandlersMail} + ${SetHandlersNews} + ${SetStartMenuInternet} + ${SetClientsMail} + ${SetClientsNews} + ${FixShellIconHandler} + ${ShowShortcuts} + ${StrFilter} "${FileMainEXE}" "+" "" "" $R9 + WriteRegStr HKLM "Software\Clients\StartMenuInternet" "" "$R9" + WriteRegStr HKLM "Software\Clients\Mail" "" "${BrandFullNameInternal}" +!macroend +!define SetAsDefaultAppGlobal "!insertmacro SetAsDefaultAppGlobal" + +!macro HideShortcuts + StrCpy $R1 "Software\Clients\Mail\${BrandFullNameInternal}\InstallInfo" + WriteRegDWORD HKLM $R1 "IconsVisible" 0 + 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 + ; Needs to handle short paths + ${If} "$0" == "$INSTDIR\${FileMainEXE}" + Delete "$DESKTOP\${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 + ; Needs to handle short paths + ${If} "$0" == "$INSTDIR\${FileMainEXE}" + Delete "$QUICKLAUNCH\${BrandFullName}.lnk" + ${EndIf} + ${EndIf} + ${EndIf} +!macroend +!define HideShortcuts "!insertmacro HideShortcuts" + +!macro ShowShortcuts + StrCpy $R1 "Software\Clients\Mail\${BrandFullNameInternal}\InstallInfo" + WriteRegDWORD HKLM $R1 "IconsVisible" 1 + SetShellVarContext all ; Set $DESKTOP to All Users + ${Unless} ${FileExists} "$DESKTOP\${BrandFullName}.lnk" + CreateShortCut "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" "" "$INSTDIR\${FileMainEXE}" 0 + ${If} "$AppUserModelID" != "" + ApplicationID::Set "$DESKTOP\${BrandFullName}.lnk" "$AppUserModelID" + ${EndIf} + ShellLink::SetShortCutWorkingDirectory "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR" + ${Unless} ${FileExists} "$DESKTOP\${BrandFullName}.lnk" + SetShellVarContext current ; Set $DESKTOP to the current user's desktop + ${Unless} ${FileExists} "$DESKTOP\${BrandFullName}.lnk" + CreateShortCut "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" "" "$INSTDIR\${FileMainEXE}" 0 + ${If} "$AppUserModelID" != "" + ApplicationID::Set "$DESKTOP\${BrandFullName}.lnk" "$AppUserModelID" + ${EndIf} + ShellLink::SetShortCutWorkingDirectory "$DESKTOP\${BrandFullName}.lnk" "$INSTDIR" + ${EndUnless} + ${EndUnless} + ${EndUnless} + ${Unless} ${FileExists} "$QUICKLAUNCH\${BrandFullName}.lnk" + CreateShortCut "$QUICKLAUNCH\${BrandFullName}.lnk" "$INSTDIR\${FileMainEXE}" "" "$INSTDIR\${FileMainEXE}" 0 + ${If} "$AppUserModelID" != "" + ApplicationID::Set "$QUICKLAUNCH\${BrandFullName}.lnk" "$AppUserModelID" + ${EndIf} + ShellLink::SetShortCutWorkingDirectory "$QUICKLAUNCH\${BrandFullName}.lnk" "$INSTDIR" + ${EndUnless} +!macroend +!define ShowShortcuts "!insertmacro ShowShortcuts" + +!macro SetHandlersBrowser + ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8 + + StrCpy $0 "SOFTWARE\Classes" + StrCpy $1 "$\"$8$\" -requestPending -osint -url $\"%1$\"" + StrCpy $2 "$\"$8$\" -url $\"%1$\"" + StrCpy $3 "$\"%1$\",,0,0,,,," + + ; An empty string is used for the 5th param because SeaMonkeyHTML is not a + ; protocol handler + ${AddHandlerValues} "$0\SeaMonkeyHTML" "$2" \ + "$INSTDIR\chrome\icons\default\html-file.ico,0" \ + "${AppRegName} Document" "" "" + ${AddDisabledDDEHandlerValues} "SeaMonkeyURL" "$1" "$8,0" \ + "${AppRegName} URL" "delete" + + ; 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" "$1" "$8,0" "" "" + ${AddDisabledDDEHandlerValues} "http" "$1" "$8,0" "" "" + ${AddDisabledDDEHandlerValues} "https" "$1" "$8,0" "" "" + + ReadRegStr $6 HKCR ".htm" "" + ${If} "$6" != "SeaMonkeyHTML" + WriteRegStr SHCTX "$0\.htm" "" "SeaMonkeyHTML" + ${EndIf} + + ReadRegStr $6 HKCR ".html" "" + ${If} "$6" != "SeaMonkeyHTML" + WriteRegStr SHCTX "$0\.html" "" "SeaMonkeyHTML" + ${EndIf} + + ReadRegStr $6 HKCR ".shtml" "" + ${If} "$6" != "SeaMonkeyHTML" + WriteRegStr SHCTX "$0\.shtml" "" "SeaMonkeyHTML" + ${EndIf} + + ReadRegStr $6 HKCR ".xht" "" + ${If} "$6" != "SeaMonkeyHTML" + WriteRegStr SHCTX "$0\.xht" "" "SeaMonkeyHTML" + ${EndIf} + + ReadRegStr $6 HKCR ".xhtml" "" + ${If} "$6" != "SeaMonkeyHTML" + WriteRegStr SHCTX "$0\.xhtml" "" "SeaMonkeyHTML" + ${EndIf} + + ; Only add webm if it's not present + ${CheckIfRegistryKeyExists} "$0" ".webm" $7 + ${If} $7 == "false" + WriteRegStr SHCTX "$0\.webm" "" "SeaMonkeyHTML" + ${EndIf} +!macroend +!define SetHandlersBrowser "!insertmacro SetHandlersBrowser" + +!macro SetHandlersMail + ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8 + + StrCpy $0 "SOFTWARE\Classes" + StrCpy $1 "$\"$8$\" $\"%1$\"" + StrCpy $2 "$\"$8$\" -osint -compose $\"%1$\"" + + ; An empty string is used for the 5th param because SeaMonkeyEML is not a + ; protocol handler + ${AddHandlerValues} "$0\SeaMonkeyEML" "$1" "$INSTDIR\chrome\icons\default\html-file.ico,0" "${AppRegNameMail} Document" "" "" + + ${AddHandlerValues} "$0\SeaMonkeyCOMPOSE" "$2" "$8,0" "${AppRegNameMail} URL" "delete" "" + + ; An empty string is used for the 4th & 5th params because the following + ; protocol handler already has a display name and additional keys required + ; for a protocol handler. + ${AddHandlerValues} "$0\mailto" "$2" "$8,0" "${AppRegNameMail} URL" "true" "" + + ; Associate the file handlers with SeaMonkeyEML + ReadRegStr $6 HKCR ".eml" "" + ${If} "$6" != "SeaMonkeyEML" + WriteRegStr SHCTX "$0\.eml" "" "SeaMonkeyEML" + ${EndIf} +!macroend +!define SetHandlersMail "!insertmacro SetHandlersMail" + +!macro SetHandlersNews + ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8 + StrCpy $0 "SOFTWARE\Classes" + StrCpy $1 "$\"$8$\" -osint -mail $\"%1$\"" + + ${AddHandlerValues} "$0\SeaMonkeyNEWS" "$1" "$8,0" "${AppRegNameNews} URL" "delete" "" + ; An empty string is used for the 4th & 5th params because the following + ; protocol handlers already have a display name and additional keys required + ; for a protocol handler. + ${AddHandlerValues} "$0\news" "$1" "$8,0" "${AppRegNameNews} URL" "true" "" + ${AddHandlerValues} "$0\nntp" "$1" "$8,0" "${AppRegNameNews} URL" "true" "" + ${AddHandlerValues} "$0\snews" "$1" "$8,0" "${AppRegNameNews} URL" "true" "" +!macroend +!define SetHandlersNews "!insertmacro SetHandlersNews" + +; XXXrstrong - there are several values that will be overwritten by and +; overwrite other installs of the same application. +!macro SetStartMenuInternet + GetFullPathName $8 "$INSTDIR\${FileMainEXE}" + GetFullPathName $7 "$INSTDIR\uninstall\helper.exe" + + ${StrFilter} "${FileMainEXE}" "+" "" "" $R9 + + StrCpy $0 "Software\Clients\StartMenuInternet\$R9" + WriteRegStr HKLM "$0" "" "${BrandFullName}" + + WriteRegStr HKLM "$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 HKLM "$0\InstallInfo" "HideIconsCommand" "$\"$7$\" /HideShortcuts" + WriteRegStr HKLM "$0\InstallInfo" "ShowIconsCommand" "$\"$7$\" /ShowShortcuts" + WriteRegStr HKLM "$0\InstallInfo" "ReinstallCommand" "$\"$7$\" /SetAsDefaultAppGlobal" + + WriteRegStr HKLM "$0\shell\open\command" "" "$\"$8$\"" + + WriteRegStr HKLM "$0\shell\properties" "" "$(CONTEXT_OPTIONS)" + WriteRegStr HKLM "$0\shell\properties\command" "" "$\"$8$\" -preferences" + + WriteRegStr HKLM "$0\shell\safemode" "" "$(CONTEXT_SAFE_MODE)" + WriteRegStr HKLM "$0\shell\safemode\command" "" "$\"$8$\" -safe-mode" + + ; Vista Capabilities registry keys + WriteRegStr HKLM "$0\Capabilities" "ApplicationDescription" "$(REG_APP_DESC)" + WriteRegStr HKLM "$0\Capabilities" "ApplicationIcon" "$8,0" + WriteRegStr HKLM "$0\Capabilities" "ApplicationName" "${BrandShortName}" + + WriteRegStr HKLM "$0\Capabilities\FileAssociations" ".htm" "SeaMonkeyHTML" + WriteRegStr HKLM "$0\Capabilities\FileAssociations" ".html" "SeaMonkeyHTML" + WriteRegStr HKLM "$0\Capabilities\FileAssociations" ".shtml" "SeaMonkeyHTML" + WriteRegStr HKLM "$0\Capabilities\FileAssociations" ".xht" "SeaMonkeyHTML" + WriteRegStr HKLM "$0\Capabilities\FileAssociations" ".xhtml" "SeaMonkeyHTML" + + WriteRegStr HKLM "$0\Capabilities\StartMenu" "StartMenuInternet" "$R9" + + WriteRegStr HKLM "$0\Capabilities\URLAssociations" "ftp" "SeaMonkeyURL" + WriteRegStr HKLM "$0\Capabilities\URLAssociations" "http" "SeaMonkeyURL" + WriteRegStr HKLM "$0\Capabilities\URLAssociations" "https" "SeaMonkeyURL" + + ; Vista Registered Application + WriteRegStr HKLM "Software\RegisteredApplications" "${AppRegName}" "$0\Capabilities" +!macroend +!define SetStartMenuInternet "!insertmacro SetStartMenuInternet" + +!macro FixShellIconHandler + ; The IconHandler reference for SeaMonkeyHTML can end up in an inconsistent + ; state due to changes not being detected by the IconHandler for side by side + ; installs. The symptoms can be either an incorrect icon or no icon being + ; displayed for files associated with SeaMonkey. By setting it here it will + ; always reference the install referenced in the + ; HKLM\Software\Classes\SeaMonkeyHTML registry key. + ClearErrors + ReadRegStr $2 HKLM "Software\Classes\SeaMonkeyHTML\ShellEx\IconHandler" "" + ${Unless} ${Errors} + ClearErrors + ReadRegStr $3 HKLM "Software\Classes\CLSID\$2\Old Icon\SeaMonkeyHTML\DefaultIcon" "" + ${Unless} ${Errors} + WriteRegStr HKLM "Software\Classes\CLSID\$2\Old Icon\SeaMonkeyHTML\DefaultIcon" "" "$INSTDIR\chrome\icons\default\html-file.ico,0" + ${EndUnless} + ${EndUnless} +!macroend +!define FixShellIconHandler "!insertmacro FixShellIconHandler" + +; XXXrstrong - there are several values that will be overwritten by and +; overwrite other installs of the same application. +!macro SetClientsMail + ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8 + ${GetLongPath} "$INSTDIR\uninstall\helper.exe" $7 + ${GetLongPath} "$INSTDIR\mozMapi32_InUse.dll" $6 + + StrCpy $0 "Software\Clients\Mail\${BrandFullNameInternal}" + WriteRegStr HKLM "$0" "" "${BrandFullNameInternal}" + WriteRegStr HKLM "$0\DefaultIcon" "" "$8,0" + WriteRegStr HKLM "$0" "DLLPath" "$6" + + ; The MapiProxy dll can be used by multiple applications but + ; is only registered for the last application installed. When the last + ; application installed is uninstalled MapiProxy.dll will no longer be + ; registered. + !ifndef NO_LOG + ${LogHeader} "DLL Registration" + !endif + ClearErrors + ${RegisterDLL} "$INSTDIR\MapiProxy_InUse.dll" + !ifndef NO_LOG + ${If} ${Errors} + ${LogMsg} "** ERROR Registering: $INSTDIR\MapiProxy_InUse.dll **" + ${Else} + ${LogUninstall} "DLLReg: \MapiProxy_InUse.dll" + ${LogMsg} "Registered: $INSTDIR\MapiProxy_InUse.dll" + ${EndIf} + !endif + + StrCpy $1 "Software\Classes\CLSID\{29F458BE-8866-11D5-A3DD-00B0D0F3BAA7}" + WriteRegStr HKLM "$1\LocalServer32" "" "$\"$8$\" /MAPIStartup" + WriteRegStr HKLM "$1\ProgID" "" "MozillaMapi.1" + WriteRegStr HKLM "$1\VersionIndependentProgID" "" "MozillaMAPI" + StrCpy $1 "SOFTWARE\Classes" + WriteRegStr HKLM "$1\MozillaMapi" "" "Mozilla MAPI" + WriteRegStr HKLM "$1\MozillaMapi\CLSID" "" "{29F458BE-8866-11D5-A3DD-00B0D0F3BAA7}" + WriteRegStr HKLM "$1\MozillaMapi\CurVer" "" "MozillaMapi.1" + WriteRegStr HKLM "$1\MozillaMapi.1" "" "Mozilla MAPI" + WriteRegStr HKLM "$1\MozillaMapi.1\CLSID" "" "{29F458BE-8866-11D5-A3DD-00B0D0F3BAA7}" + + ; 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 HKLM "$0\InstallInfo" "HideIconsCommand" "$\"$7$\" /HideShortcuts" + WriteRegStr HKLM "$0\InstallInfo" "ShowIconsCommand" "$\"$7$\" /ShowShortcuts" + WriteRegStr HKLM "$0\InstallInfo" "ReinstallCommand" "$\"$7$\" /SetAsDefaultAppGlobal" + + ClearErrors + ReadRegDWORD $1 HKLM "$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 HKLM "$0\InstallInfo" "IconsVisible" 1 + ${Else} + WriteRegDWORD HKLM "$0\InstallInfo" "IconsVisible" 0 + ${EndIf} + ${EndIf} + + ; Mail shell/open/command + WriteRegStr HKLM "$0\shell\open\command" "" "$\"$8$\" -mail" + + ; options + WriteRegStr HKLM "$0\shell\properties" "" "$(CONTEXT_OPTIONS)" + WriteRegStr HKLM "$0\shell\properties\command" "" "$\"$8$\" -options" + + ; safemode + WriteRegStr HKLM "$0\shell\safemode" "" "$(CONTEXT_SAFE_MODE)" + WriteRegStr HKLM "$0\shell\safemode\command" "" "$\"$8$\" -safe-mode" + + ; Protocols + StrCpy $1 "$\"$8$\" -compose $\"%1$\"" + ${AddHandlerValues} "$0\Protocols\mailto" "$1" "$8,0" "${AppRegNameMail} URL" "true" "" + + ; Vista Capabilities registry keys + WriteRegStr HKLM "$0\Capabilities" "ApplicationDescription" "$(REG_APP_DESC)" + WriteRegStr HKLM "$0\Capabilities" "ApplicationIcon" "$8,0" + WriteRegStr HKLM "$0\Capabilities" "ApplicationName" "${AppRegNameMail}" + WriteRegStr HKLM "$0\Capabilities\FileAssociations" ".eml" "SeaMonkeyEML" + WriteRegStr HKLM "$0\Capabilities\StartMenu" "Mail" "${BrandFullNameInternal}" + WriteRegStr HKLM "$0\Capabilities\URLAssociations" "mailto" "SeaMonkeyCOMPOSE" + + ; Vista Registered Application + WriteRegStr HKLM "Software\RegisteredApplications" "${AppRegNameMail}" "$0\Capabilities" +!macroend +!define SetClientsMail "!insertmacro SetClientsMail" + +; XXXrstrong - there are several values that will be overwritten by and +; overwrite other installs of the same application. +!macro SetClientsNews + ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8 + ${GetLongPath} "$INSTDIR\uninstall\helper.exe" $7 + ${GetLongPath} "$INSTDIR\mozMapi32_InUse.dll" $6 + + StrCpy $0 "Software\Clients\News\${BrandFullNameInternal}" + WriteRegStr HKLM "$0" "" "${BrandFullNameInternal}" + WriteRegStr HKLM "$0\DefaultIcon" "" "$8,0" + WriteRegStr HKLM "$0" "DLLPath" "$6" + + ; The MapiProxy dll can exist in multiple installs of the application. + ; Registration occurs as follows with the last action to occur being the one + ; that wins: On install and software update when helper.exe runs with the + ; /PostUpdate argument. On setting the application as the system's default + ; application using Window's "Set program access and defaults". + !ifndef NO_LOG + ${LogHeader} "DLL Registration" + !endif + ClearErrors + ${RegisterDLL} "$INSTDIR\MapiProxy_InUse.dll" + !ifndef NO_LOG + ${If} ${Errors} + ${LogMsg} "** ERROR Registering: $INSTDIR\MapiProxy_InUse.dll **" + ${Else} + ${LogUninstall} "DLLReg: \MapiProxy_InUse.dll" + ${LogMsg} "Registered: $INSTDIR\MapiProxy_InUse.dll" + ${EndIf} + !endif + + StrCpy $1 "Software\Classes\CLSID\{29F458BE-8866-11D5-A3DD-00B0D0F3BAA7}" + WriteRegStr HKLM "$1\LocalServer32" "" "$\"$8$\" /MAPIStartup" + WriteRegStr HKLM "$1\ProgID" "" "MozillaMapi.1" + WriteRegStr HKLM "$1\VersionIndependentProgID" "" "MozillaMAPI" + StrCpy $1 "SOFTWARE\Classes" + WriteRegStr HKLM "$1\MozillaMapi" "" "Mozilla MAPI" + WriteRegStr HKLM "$1\MozillaMapi\CLSID" "" "{29F458BE-8866-11D5-A3DD-00B0D0F3BAA7}" + WriteRegStr HKLM "$1\MozillaMapi\CurVer" "" "MozillaMapi.1" + WriteRegStr HKLM "$1\MozillaMapi.1" "" "Mozilla MAPI" + WriteRegStr HKLM "$1\MozillaMapi.1\CLSID" "" "{29F458BE-8866-11D5-A3DD-00B0D0F3BAA7}" + + ; Mail shell/open/command + WriteRegStr HKLM "$0\shell\open\command" "" "$\"$8$\" -mail" + + ; Vista Capabilities registry keys + WriteRegStr HKLM "$0\Capabilities" "ApplicationDescription" "$(REG_APP_DESC)" + WriteRegStr HKLM "$0\Capabilities" "ApplicationIcon" "$8,0" + WriteRegStr HKLM "$0\Capabilities" "ApplicationName" "${AppRegNameNews}" + WriteRegStr HKLM "$0\Capabilities\URLAssociations" "nntp" "SeaMonkeyNEWS" + WriteRegStr HKLM "$0\Capabilities\URLAssociations" "news" "SeaMonkeyNEWS" + WriteRegStr HKLM "$0\Capabilities\URLAssociations" "snews" "SeaMonkeyNEWS" + + ; Protocols + StrCpy $1 "$\"$8$\" -osint -mail $\"%1$\"" + ${AddHandlerValues} "$0\Protocols\nntp" "$1" "$8,0" "${AppRegNameNews} URL" "true" "" + ${AddHandlerValues} "$0\Protocols\news" "$1" "$8,0" "${AppRegNameNews} URL" "true" "" + ${AddHandlerValues} "$0\Protocols\snews" "$1" "$8,0" "${AppRegNameNews} URL" "true" "" + + ; Vista Registered Application + WriteRegStr HKLM "Software\RegisteredApplications" "${AppRegNameNews}" "$0\Capabilities" +!macroend +!define SetClientsNews "!insertmacro SetClientsNews" + +!macro SetAppKeys + ${GetLongPath} "$INSTDIR" $8 + StrCpy $0 "Software\Mozilla\${BrandFullNameInternal}\${AppVersion} (${AB_CD})\Main" + ${WriteRegStr2} $TmpVal "$0" "Install Directory" "$8" 0 + ${WriteRegStr2} $TmpVal "$0" "PathToExe" "$8\${FileMainEXE}" 0 + + StrCpy $0 "Software\Mozilla\${BrandFullNameInternal}\${AppVersion} (${AB_CD})\Uninstall" + ${WriteRegStr2} $TmpVal "$0" "Description" "${BrandFullNameInternal} ${AppVersion} (${ARCH} ${AB_CD})" 0 + + StrCpy $0 "Software\Mozilla\${BrandFullNameInternal}\${AppVersion} (${AB_CD})" + ${WriteRegStr2} $TmpVal "$0" "" "${AppVersion} (${AB_CD})" 0 + + StrCpy $0 "Software\Mozilla\${BrandFullNameInternal} ${AppVersion}\bin" + ${WriteRegStr2} $TmpVal "$0" "PathToExe" "$8\${FileMainEXE}" 0 + + StrCpy $0 "Software\Mozilla\${BrandFullNameInternal} ${AppVersion}\extensions" + ${WriteRegStr2} $TmpVal "$0" "Components" "$8\components" 0 + ${WriteRegStr2} $TmpVal "$0" "Plugins" "$8\plugins" 0 + + StrCpy $0 "Software\Mozilla\${BrandFullNameInternal} ${AppVersion}" + ${WriteRegStr2} $TmpVal "$0" "GeckoVer" "${GREVersion}" 0 + + StrCpy $0 "Software\Mozilla\${BrandFullNameInternal}" + ${WriteRegStr2} $TmpVal "$0" "" "${GREVersion}" 0 + ${WriteRegStr2} $TmpVal "$0" "CurrentVersion" "${AppVersion} (${AB_CD})" 0 +!macroend +!define SetAppKeys "!insertmacro SetAppKeys" + +!macro SetUninstallKeys + StrCpy $0 "Software\Microsoft\Windows\CurrentVersion\Uninstall\${BrandFullNameInternal} ${AppVersion} (${ARCH} ${AB_CD})" + + WriteRegStr HKLM "$0" "${BrandShortName}InstallerTest" "Write Test" + ${If} ${Errors} + StrCpy $1 "HKCU" + SetShellVarContext current ; Set SHCTX to the current user (e.g. HKCU) + ${Else} + StrCpy $1 "HKLM" + SetShellVarContext all ; Set SHCTX to all users (e.g. HKLM) + DeleteRegValue HKLM "$0" "${BrandShortName}InstallerTest" + ${EndIf} + + ${GetLongPath} "$INSTDIR" $8 + + ; Write the uninstall registry keys + ${WriteRegStr2} $1 "$0" "Comments" "${BrandFullNameInternal} ${AppVersion} (${ARCH} ${AB_CD})" 0 + ${WriteRegStr2} $1 "$0" "DisplayIcon" "$8\${FileMainEXE},0" 0 + ${WriteRegStr2} $1 "$0" "DisplayName" "${BrandFullNameInternal} ${AppVersion} (${ARCH} ${AB_CD})" 0 + ${WriteRegStr2} $1 "$0" "DisplayVersion" "${AppVersion}" 0 + ${WriteRegStr2} $1 "$0" "InstallLocation" "$8" 0 + ${WriteRegStr2} $1 "$0" "Publisher" "Mozilla" 0 + ${WriteRegStr2} $1 "$0" "UninstallString" "$8\uninstall\helper.exe" 0 + ${WriteRegStr2} $1 "$0" "URLInfoAbout" "${URLInfoAbout}" 0 + ${WriteRegStr2} $1 "$0" "URLUpdateInfo" "${URLUpdateInfo}" 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} +!macroend +!define SetUninstallKeys "!insertmacro SetUninstallKeys" + +; Updates protocol handlers if their registry open command value is for this +; install location +!macro UpdateProtocolHandlers + ; Store the command to open the app with an url in a register for easy access. + ${GetLongPath} "$INSTDIR\${FileMainEXE}" $8 + StrCpy $0 "SOFTWARE\Classes" + StrCpy $1 "$\"$8$\" -osint -compose $\"%1$\"" + StrCpy $2 "$\"$8$\" -osint -mail $\"%1$\"" + StrCpy $3 "$\"$8$\" -requestPending -osint -url $\"%1$\"" + StrCpy $4 "$\"%1$\",,0,0,,,," + StrCpy $5 "$\"$8$\" -url $\"%1$\"" + + ; Only set the file and protocol handlers if the existing one under HKCR is + ; for this install location. + ${IsHandlerForInstallDir} "SeaMonkeyHTML" $R9 + ${If} "$R9" == "true" + ; An empty string is used for the 5th param because SeaMonkeyHTML is not a + ; protocol handler. + ${AddHandlerValues} "$0\SeaMonkeyHTML" "$5" \ + "$INSTDIR\chrome\icons\default\html-file.ico,0" \ + "${AppRegName} Document" "" "" + ${EndIf} + + ${IsHandlerForInstallDir} "SeaMonkeyURL" $R9 + ${If} "$R9" == "true" + ${AddDisabledDDEHandlerValues} "SeaMonkeyURL" "$3" "$8,0" \ + "${AppRegName} URL" "delete" + ${EndIf} + + ${IsHandlerForInstallDir} "ftp" $R9 + ${If} "$R9" == "true" + ${AddDisabledDDEHandlerValues} "ftp" "$3" "$8,0" "" "" + ${EndIf} + + ${IsHandlerForInstallDir} "http" $R9 + ${If} "$R9" == "true" + ${AddDisabledDDEHandlerValues} "http" "$3" "$8,0" "" "" + ${EndIf} + + ${IsHandlerForInstallDir} "https" $R9 + ${If} "$R9" == "true" + ${AddDisabledDDEHandlerValues} "https" "$3" "$8,0" "" "" + ${EndIf} + + ${IsHandlerForInstallDir} "SeaMonkeyEML" $R9 + ${If} "$R9" == "true" + ${AddHandlerValues} "SOFTWARE\Classes\SeaMonkeyEML" "$2" \ + "$INSTDIR\chrome\icons\default\html-file.ico,0" \ + "${AppRegNameMail} Document" "" "" + ${EndIf} + + ${IsHandlerForInstallDir} "SeaMonkeyMAIL" $R9 + ${If} "$R9" == "true" + ${AddHandlerValues} "SOFTWARE\Classes\SeaMonkeyMAIL" "$2" "$8,0" \ + "${AppRegNameMail} URL" "delete" "" + ${EndIf} + + ${IsHandlerForInstallDir} "mailto" $R9 + ${If} "$R9" == "true" + ${AddHandlerValues} "SOFTWARE\Classes\mailto" "$1" "$8,0" "" "" "" + ${EndIf} + + ${IsHandlerForInstallDir} "SeaMonkeyNEWS" $R9 + ${If} "$R9" == "true" + ${AddHandlerValues} "SOFTWARE\Classes\SeaMonkeyNEWS" "$2" "$8,0" \ + "${AppRegNameMail} URL" "delete" "" + ${EndIf} + + ${IsHandlerForInstallDir} "news" $R9 + ${If} "$R9" == "true" + ${AddHandlerValues} "SOFTWARE\Classes\news" "$2" "$8,0" "" "" "" + ${EndIf} + + ${IsHandlerForInstallDir} "snews" $R9 + ${If} "$R9" == "true" + ${AddHandlerValues} "SOFTWARE\Classes\snews" "$2" "$8,0" "" "" "" + ${EndIf} + + ${IsHandlerForInstallDir} "nntp" $R9 + ${If} "$R9" == "true" + ${AddHandlerValues} "SOFTWARE\Classes\nntp" "$2" "$8,0" "" "" "" + ${EndIf} +!macroend +!define UpdateProtocolHandlers "!insertmacro UpdateProtocolHandlers" +!insertmacro RegCleanAppHandler + +!macro RegisterAccessibleHandler + ${RegisterDLL} "$INSTDIR\AccessibleHandler.dll" +!macroend +!define RegisterAccessibleHandler "!insertmacro RegisterAccessibleHandler" + +; 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 seamonkey.exe. + ${RegCleanAppHandler} "gopher" + + ; Remove support for launching chrome urls from the shell during install or + ; update if the DefaultIcon is from seamonkey.exe (Bug 301073). + ${RegCleanAppHandler} "chrome" + + ; 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 SeamonkeyURL. + StrCpy $0 "Software\Microsoft\Windows\Shell\Associations\UrlAssociations\gopher" + ReadRegStr $2 HKCU "$0\UserChoice" "Progid" + ${If} "$2" == "SeamonkeyURL" + DeleteRegKey HKCU "$0" + ${EndIf} + + ; Remove the SupportUTF8 registry value as it causes MAPI issues on some locales + ; with non-ASCII characters in file names. + StrCpy $0 "Software\Clients\Mail\${ClientsRegName}" + DeleteRegValue HKLM $0 "SupportUTF8" +!macroend +!define RemoveDeprecatedKeys "!insertmacro RemoveDeprecatedKeys" + +; Removes various directories and files for reasons noted below. +!macro RemoveDeprecatedFiles + ; Remove the Java Console extension (bug 1165156) + FindFirst $0 $1 "$INSTDIR\extensions\{CAFEEFAC-00*-0000-*-ABCDEFFEDCBA}" + loopDirs: + StrCmp $1 "" doneDirs + ${If} ${FileExists} "$INSTDIR\extensions\$1" + !ifndef NO_LOG + ${LogMsg} "Removing Java console edition in: $INSTDIR\extensions\$1" + !endif + RmDir /r /REBOOTOK "$INSTDIR\extensions\$1" + ${EndIf} + FindNext $0 $1 + Goto loopDirs + doneDirs: + FindClose $0 +!macroend +!define RemoveDeprecatedFiles "!insertmacro RemoveDeprecatedFiles" + +!macro FixClassKeys + StrCpy $0 "SOFTWARE\Classes" + + ; BROWSER part + ; File handler keys and name value pairs that may need to be created during + ; install or upgrade. + ReadRegStr $2 SHCTX "$0\.shtml" "Content Type" + ${If} $2 == "" + StrCpy $2 "$0\.shtml" + ${WriteRegStr2} $TmpVal "$0\.shtml" "" "shtmlfile" 0 + ${WriteRegStr2} $TmpVal "$0\.shtml" "Content Type" "text/html" 0 + ${WriteRegStr2} $TmpVal "$0\.shtml" "PerceivedType" "text" 0 + ${EndIf} + + ReadRegStr $2 SHCTX "$0\.xht" "Content Type" + ${If} $2 == "" + ${WriteRegStr2} $TmpVal "$0\.xht" "" "xhtfile" 0 + ${WriteRegStr2} $TmpVal "$0\.xht" "Content Type" "application/xhtml+xml" 0 + ${EndIf} + + ReadRegStr $2 SHCTX "$0\.xhtml" "Content Type" + ${If} $2 == "" + ${WriteRegStr2} $TmpVal "$0\.xhtml" "" "xhtmlfile" 0 + ${WriteRegStr2} $TmpVal "$0\.xhtml" "Content Type" "application/xhtml+xml" 0 + ${EndIf} + + ; Protocol handler keys and name value pairs that may need to be updated during + ; install or upgrade. + + ; Store the command to open the app with an url in a register for easy access. + GetFullPathName $8 "$INSTDIR\${FileMainEXE}" + StrCpy $1 "$\"$8$\" -requestPending -osint -url $\"%1$\"" + StrCpy $2 "$\"$8$\" -url $\"%1$\"" + + ; Always set the file and protocol handlers since they may specify a + ; different path and the path is used by Vista when setting associations. + ${AddHandlerValues} "$0\SeaMonkeyURL" "$1" "$8,0" "${AppRegName} URL" "delete" "true" + + ; An empty string is used for the 5th param because SeaMonkeyHTML is not a + ; protocol handler + ${AddHandlerValues} "$0\SeaMonkeyHTML" "$2" \ + "$INSTDIR\chrome\icons\default\html-file.ico,0" \ + "${AppRegName} Document" "" "" + + ReadRegStr $2 SHCTX "$0\http\shell\open\command" "" + ClearErrors + ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1 + ${Unless} ${Errors} + ${AddHandlerValues} "$0\http" "$1" "$8,0" "" "" "true" + ${EndUnless} + + ReadRegStr $2 SHCTX "$0\https\shell\open\command" "" + ClearErrors + ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1 + ${Unless} ${Errors} + ${AddHandlerValues} "$0\https" "$1" "$8,0" "" "" "true" + ${EndUnless} + + ReadRegStr $2 SHCTX "$0\ftp\shell\open\command" "" + ClearErrors + ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1 + ${Unless} ${Errors} + ${AddHandlerValues} "$0\ftp" "$1" "$8,0" "" "" "true" + ${EndUnless} + + ; MAIL/NEWS part + GetFullPathName $8 "$INSTDIR\${FileMainEXE}" + + StrCpy $1 "$\"$8$\" -compose $\"%1$\"" + ${AddHandlerValues} "$0\SeaMonkeyCOMPOSE" "$1" "$8,0" "${AppRegNameMail} URL" "delete" "" + + ReadRegStr $2 SHCTX "$0\mailto\shell\open\command" "" + ${GetPathFromString} "$2" $3 + GetFullPathName $2 "$3" + ClearErrors + ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1 + ${Unless} ${Errors} + ${AddHandlerValues} "$0\mailto" "$1" "$8,0" "" "" "" + ${EndUnless} + + StrCpy $1 "$\"$8$\" $\"%1$\"" + ${AddHandlerValues} "$0\SeaMonkeyEML" "$1" "$INSTDIR\chrome\icons\default\html-file.ico,0" "${AppRegNameMail} Document" "" "" + + StrCpy $1 "$\"$8$\" -osint -mail $\"%1$\"" + ${AddHandlerValues} "$0\SeaMonkeyNEWS" "$1" "$8,0" "${AppRegNameNews} URL" "delete" "" + + ReadRegStr $2 SHCTX "$0\news\shell\open\command" "" + ${GetPathFromString} "$2" $3 + GetFullPathName $2 "$3" + ClearErrors + ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1 + ${Unless} ${Errors} + ${AddHandlerValues} "$0\news" "$1" "$8,0" "" "" "" + ${EndUnless} + + ReadRegStr $2 SHCTX "$0\snews\shell\open\command" "" + ${GetPathFromString} "$2" $3 + GetFullPathName $2 "$3" + ClearErrors + ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1 + ${Unless} ${Errors} + ${AddHandlerValues} "$0\snews" "$1" "$8,0" "" "" "" + ${EndUnless} + + ReadRegStr $2 SHCTX "$0\nntp\shell\open\command" "" + ${GetPathFromString} "$2" $3 + GetFullPathName $2 "$3" + ClearErrors + ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1 + ${Unless} ${Errors} + ${AddHandlerValues} "$0\nntp" "$1" "$8,0" "" "" "" + ${EndUnless} + + ; remove DI and SOC from the .eml class if it exists + ReadRegStr $2 SHCTX "$0\.eml\shell\open\command" "" + ${GetPathFromString} "$2" $3 + GetFullPathName $2 "$3" + ClearErrors + ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1 + ${Unless} ${Errors} + DeleteRegKey HKLM "$0\.eml\shell\open\command" + ${EndUnless} + + ReadRegStr $2 SHCTX "$0\.eml\DefaultIcon" "" + ${GetPathFromString} "$2" $3 + GetFullPathName $2 "$3" + ClearErrors + ${WordFind} "$2" "${FileMainEXE}" "E+1{" $R1 + ${Unless} ${Errors} + DeleteRegKey HKLM "$0\.eml\DefaultIcon" + ${EndUnless} + +!macroend +!define FixClassKeys "!insertmacro FixClassKeys" + +; Creates the shortcuts log ini file with the appropriate entries if it doesn't +; already exist. +!macro CreateShortcutsLog + ${GetShortcutsLogPath} $0 + ${Unless} ${FileExists} "$0" + ; Default to ${BrandFullName} for the Start Menu Folder + StrCpy $TmpVal "${BrandFullName}" + ; Prior to Unicode installer the Start Menu directory was written to the + ; registry and this value can be used to set the Start Menu directory. + ClearErrors + ReadRegStr $0 SHCTX "Software\Mozilla\${BrandFullNameInternal}\${AppVersion} (${AB_CD})\Main" "Start Menu Folder" + ${If} ${Errors} + ${FindSMProgramsDir} $0 + ${If} "$0" != "" + StrCpy $TmpVal "$0" + ${EndIf} + ${Else} + StrCpy $TmpVal "$0" + ${EndUnless} + + ${LogSMProgramsDirRelPath} "$TmpVal" + ${LogSMProgramsShortcut} "${BrandFullName}.lnk" + ${LogSMProgramsShortcut} "${BrandFullName} ($(SAFE_MODE)).lnk" + ${LogSMProgramsShortcut} "${BrandFullNameInternal} $(MAILNEWS_TEXT).lnk" + ${LogSMProgramsShortcut} "$(PROFILE_TEXT).lnk" + ${LogQuickLaunchShortcut} "${BrandFullName}.lnk" + ${LogDesktopShortcut} "${BrandFullName}.lnk" + ${EndUnless} +!macroend +!define CreateShortcutsLog "!insertmacro CreateShortcutsLog" + +; The MAPI DLLs are copied and the copies are used for the MAPI registration +; to lessen file in use errors on application update. +!macro UpgradeMapiDLLs + ClearErrors + ${DeleteFile} "$INSTDIR\MapiProxy_InUse.dll" + ${If} ${Errors} + ${DeleteFile} "$INSTDIR\MapiProxy_InUse.dll.moz-delete" ; shouldn't exist + Rename "$INSTDIR\MapiProxy_InUse.dll" "$INSTDIR\MapiProxy_InUse.dll.moz-delete" + Delete /REBOOTOK "$INSTDIR\MapiProxy_InUse.dll.moz-delete" + ${EndIf} + CopyFiles /SILENT "$INSTDIR\MapiProxy.dll" "$INSTDIR\MapiProxy_InUse.dll" + + ClearErrors + ${DeleteFile} "$INSTDIR\mozMapi32_InUse.dll" + ${If} ${Errors} + ${DeleteFile} "$INSTDIR\mozMapi32_InUse.dll.moz-delete" ; shouldn't exist + Rename "$INSTDIR\mozMapi32_InUse.dll" "$INSTDIR\mozMapi32_InUse.dll.moz-delete" + Delete /REBOOTOK "$INSTDIR\mozMapi32_InUse.dll.moz-delete" + ${EndIf} + CopyFiles /SILENT "$INSTDIR\mozMapi32.dll" "$INSTDIR\mozMapi32_InUse.dll" +!macroend +!define UpgradeMapiDLLs "!insertmacro UpgradeMapiDLLs" + +; 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 "AccessibleHandler.dll" + Push "AccessibleMarshal.dll" + Push "IA2Marshal.dll" + Push "freebl3.dll" + Push "nssckbi.dll" + Push "nspr4.dll" + Push "nssdbm3.dll" + Push "sqlite3.dll" + Push "mozsqlite3.dll" + Push "xpcom.dll" + Push "crashreporter.exe" + Push "minidump-analyzer.exe" + Push "pingsender.exe" + Push "updater.exe" + Push "xpicleanup.exe" + Push "MapiProxy.dll" + Push "MapiProxy_InUse.dll" + Push "mozMapi32.dll" + Push "mozMapi32_InUse.dll" + Push "${FileMainEXE}" +!macroend +!define PushFilesToCheck "!insertmacro PushFilesToCheck" + +; The !ifdef NO_LOG prevents warnings when compiling the installer since these +; functions are currently only used by the uninstaller. +!ifdef NO_LOG +Function SetAsDefaultMailAppUser + SetShellVarContext current ; Set SHCTX to the current user (e.g. HKCU) + ${SetHandlersMail} + ClearErrors + ReadRegStr $0 HKLM "Software\RegisteredApplications" "${AppRegNameMail}" + ; Only register as the handler if the app registry name exists + ; under the RegisteredApplications registry key. + ${Unless} ${Errors} + AppAssocReg::SetAppAsDefaultAll "${AppRegNameMail}" + ${EndUnless} +FunctionEnd + +Function SetAsDefaultNewsAppUser + SetShellVarContext current ; Set SHCTX to the current user (e.g. HKCU) + ${SetHandlersNews} + ClearErrors + ReadRegStr $0 HKLM "Software\RegisteredApplications" "${AppRegNameNews}" + ; Only register as the handler if the app registry name exists + ; under the RegisteredApplications registry key. + ${Unless} ${Errors} + AppAssocReg::SetAppAsDefaultAll "${AppRegNameNews}" + ${EndUnless} +FunctionEnd +!endif + |