You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ORPA-pyOpenRPA/Resources/MozillaFirefoxPortable/Other/Source/FirefoxPortableU.nsi

815 lines
31 KiB

;Copyright 2004-2020 John T. Haller of PortableApps.com
;Website: http://PortableApps.com/FirefoxPortable
;This software is OSI Certified Open Source Software.
;OSI Certified is a certification mark of the Open Source Initiative.
;This program is free software; you can redistribute it and/or
;modify it under the terms of the GNU General Public License
;as published by the Free Software Foundation; either version 2
;of the License, or (at your option) any later version.
;This program is distributed in the hope that it will be useful,
;but WITHOUT ANY WARRANTY; without even the implied warranty of
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;GNU General Public License for more details.
;You should have received a copy of the GNU General Public License
;along with this program; if not, write to the Free Software
;Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
!define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
!define PORTABLEAPPNAME "Mozilla Firefox, Portable Edition"
!define NamePortable "Mozilla Firefox, Portable Edition"
!define APPNAME "Firefox"
!define NAME "FirefoxPortable"
!define AppID "FirefoxPortable"
!define VER "2.2.1.0"
!define WEBSITE "PortableApps.com/FirefoxPortable"
!define DEFAULTEXE "firefox.exe"
!define DEFAULTAPPDIR "firefox"
!define LAUNCHERLANGUAGE "English"
;=== Program Details
Name "${PORTABLEAPPNAME}"
OutFile "..\..\${NAME}.exe"
Caption "${PORTABLEAPPNAME} | PortableApps.com"
VIProductVersion "${VER}"
VIAddVersionKey ProductName "${PORTABLEAPPNAME}"
VIAddVersionKey Comments "Allows ${APPNAME} to be run from a removable drive. For additional details, visit ${WEBSITE}"
VIAddVersionKey CompanyName "PortableApps.com"
VIAddVersionKey LegalCopyright "John T. Haller"
VIAddVersionKey FileDescription "${PORTABLEAPPNAME}"
VIAddVersionKey FileVersion "${VER}"
VIAddVersionKey ProductVersion "${VER}"
VIAddVersionKey InternalName "${PORTABLEAPPNAME}"
VIAddVersionKey LegalTrademarks "Firefox is a Registered Trademark of The Mozilla Foundation. PortableApps.com is a Registered Trademark of Rare Ideas, LLC."
VIAddVersionKey OriginalFilename "${NAME}.exe"
;VIAddVersionKey PrivateBuild ""
;VIAddVersionKey SpecialBuild ""
;=== Runtime Switches
CRCCheck On
WindowIcon Off
SilentInstall Silent
AutoCloseWindow True
RequestExecutionLevel user
XPStyle on
Unicode true
ManifestDPIAware true
; Best Compression
SetCompress Auto
SetCompressor /SOLID lzma
SetCompressorDictSize 32
SetDatablockOptimize On
;=== Include
;(Standard NSIS)
!include FileFunc.nsh
!insertmacro GetParameters ;Requires NSIS 2.40 or better
!include LogicLib.nsh
!include Registry.nsh
!include TextFunc.nsh
!insertmacro GetParent
!include WinVer.nsh
!include WordFunc.nsh
!insertmacro VersionCompare
;(NSIS Plugins)
!include TextReplace.nsh
;(Custom)
!include CheckForPlatformSplashDisable.nsh
!include ProcFunc.nsh
!include ReplaceInFileWithTextReplace.nsh
!include ReadINIStrWithDefault.nsh
!include RMDirIfNotJunction.nsh
!include SetFileAttributesDirectoryNormal.nsh
;=== Program Icon
Icon "..\..\App\AppInfo\appicon.ico"
;=== Icon & Stye ===
BrandingText "PortableApps.com®"
;=== Languages
LoadLanguageFile "${NSISDIR}\Contrib\Language files\${LAUNCHERLANGUAGE}.nlf"
!include PortableApps.comLauncherLANG_${LAUNCHERLANGUAGE}.nsh
;=== Variables
Var PROGRAMDATA ;Missing system var
Var PROGRAMDIRECTORY
Var PROGRAMDIRECTORY64
Var PROFILEDIRECTORY
Var ORIGINALPROFILEDIRECTORY
Var SETTINGSDIRECTORY
Var PLUGINSDIRECTORY
Var ADDITIONALPARAMETERS
Var ALLOWMULTIPLEINSTANCES
Var SKIPCOMPREGFIX
Var EXECSTRING
Var PROGRAMEXECUTABLE
Var INIPATH
Var DISABLESPLASHSCREEN
Var DISABLEINTELLIGENTSTART
Var LOCALHOMEPAGE
Var ISDEFAULTDIRECTORY
Var RUNLOCALLY
Var WAITFORPROGRAM
Var LASTPROFILEDIRECTORY
Var APPDATAPATH
Var SECONDARYLAUNCH
Var MOZILLAORGKEYEXISTS
Var HKLMMOZILLAORGKEYEXISTS
Var MISSINGFILEORPATH
Var CRASHREPORTSDIREXISTS
Var EXTENSIONSDIREXISTS
Var bolHKCUSoftwareMozillaFirefoxCrashReporterExists
Var bolHKCUSoftwareMozillaFirefoxExists
Var bolHKCUSoftwareMozillaExists
Var bolPendingPingsExists
Var bolProgramDataMozillaUpdatesExists
Var SubmitCrashReportBackup
Var bolLauncherIsAlreadyRunning
Var strPassedParameters
Var bolAlwaysUse32Bit
Var bolUsing64Bit
;=== START INTEGRITY CHECK 1.1 Var
Var bolCustomIntegrityCheckStartUnsupported
Var strCustomIntegrityCheckVersion
;=== END INTEGRITY CHECK
Section .onInit
ExpandEnvStrings $PROGRAMDATA "%PROGRAMDATA%"
System::Call kernel32::IsProcessorFeaturePresent(i${PF_XMMI64_INSTRUCTIONS_AVAILABLE})i.r0
${If} $0 == 0
;SSE2 unavailable
MessageBox MB_ICONEXCLAMATION|MB_OK "This computer has an older CPU that lacks SSE2 instruction set support. Mozilla Firefox 49 and later can not run on this computer."
Abort
${EndIf}
;=== START INTEGRITY CHECK 1.1 OnInit
;Check for improper install/upgrade without running the PA.c Installer which can cause issues
;Designed to not require ReadINIStrWithDefault which is not included in the PA.c Launcher code
${If} ${FileExists} "$EXEDIR\App\AppInfo\appinfo.ini"
${If} ${FileExists} "$EXEDIR\App\AppInfo\pac_installer_log.ini"
ReadINIStr $R0 "$EXEDIR\App\AppInfo\pac_installer_log.ini" "PortableApps.comInstaller" "Info2"
${If} $R0 == "This file was generated by the PortableApps.com Installer wizard and modified by the official PortableApps.com Installer TM Rare Ideas, LLC as the app was installed."
StrCpy $R1 "true"
${Else}
StrCpy $R1 "false"
${EndIf}
${Else}
StrCpy $R1 "false"
${EndIf}
${Else}
StrCpy $R1 "true"
${EndIf}
${If} $R1 == "false"
;Upgrade or install sans the PortableApps.com Installer which can cause compatibility issues
ClearErrors
ReadINIStr $0 "$EXEDIR\App\AppInfo\appinfo.ini" "Version" "PackageVersion"
${If} ${Errors}
${OrIf} $0 == ""
StrCpy $0 "0.0.0.1"
ClearErrors
${EndIf}
ClearErrors
ReadINIStr $1 "$EXEDIR\Data\settings\${AppID}Settings.ini" "${AppID}Settings" "InvalidPackageWarningShown"
${If} ${Errors}
${OrIf} $1 == ""
StrCpy $1 "0.0.0.0"
ClearErrors
${EndIf}
${VersionCompare} $0 $1 $2
${If} $2 == 1
MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2 `Integrity Failure Warning: ${NamePortable} was installed or upgraded without using its installer and some critical files may have been modified. This could cause data loss, personal data left behind on a shared PC, functionality issues, and/or may be a violation of the application's license. Neither the application publisher nor PortableApps.com will be responsible for any issues you encounter.$\r$\n$\r$\nWould you like to start ${NamePortable} in its current unsupported state?` IDYES CustomIntegrityCheckGotoStartAnyway IDNO CustomIntegrityCheckGotoDownloadQuestion
CustomIntegrityCheckGotoDownloadQuestion:
;Check to ensure we have a valid homepage before asking the user
StrCpy $R0 ""
${If} ${FileExists} "$EXEDIR\App\AppInfo\appinfo.ini"
ReadINIStr $R0 "$EXEDIR\App\AppInfo\appinfo.ini" "Details" "Homepage"
${EndIf}
${If} $R0 == ""
Abort
${Else}
StrCpy $R1 $R0 4
${If} $R1 != "http"
${AndIf} $R1 != "HTTP"
StrCpy $R0 "http://$R0"
${EndIf}
${EndIf}
MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON1 `Would you like to visit the ${NamePortable} homepage to download the app and upgrade your current install?` IDYES CustomIntegrityCheckGotoURL IDNO CustomIntegrityCheckGotoAbort
CustomIntegrityCheckGotoURL:
ExecShell "open" $R0
Abort
CustomIntegrityCheckGotoAbort:
Abort
CustomIntegrityCheckGotoStartAnyway:
StrCpy $bolCustomIntegrityCheckStartUnsupported true
StrCpy $strCustomIntegrityCheckVersion $0
${EndIf}
${EndIf}
;=== END INTEGRITY CHECK
SectionEnd
Section "Main"
;=== Create a mutex so we can determine if this specific launcher is already running
${WordReplace} $EXEDIR "\" "-" "+" $0
System::Call 'kernel32::CreateMutex(i 0, i 0, t "FirefoxPortable$0") ?e'
Pop $R0
${If} $R0 != 0
StrCpy $bolLauncherIsAlreadyRunning true
${Else}
StrCpy $bolLauncherIsAlreadyRunning false
${EndIf}
;=== Setup variables
ReadEnvStr $APPDATAPATH "APPDATA"
;=== Find the INI file, if there is one
IfFileExists "$EXEDIR\${NAME}.ini" "" NoINI
StrCpy "$INIPATH" "$EXEDIR"
;=== Read the parameters from the INI file
${ReadINIStrWithDefault} $0 "$INIPATH\${NAME}.ini" "${NAME}" "${APPNAME}Directory" "App\${DEFAULTAPPDIR}"
StrCpy $PROGRAMDIRECTORY "$EXEDIR\$0"
StrCpy $PROGRAMDIRECTORY64 "$EXEDIR\$064"
${ReadINIStrWithDefault} $0 "$INIPATH\${NAME}.ini" "${NAME}" "ProfileDirectory" "Data\profile"
StrCpy $PROFILEDIRECTORY "$EXEDIR\$0"
${ReadINIStrWithDefault} $0 "$INIPATH\${NAME}.ini" "${NAME}" "SettingsDirectory" "Data\settings"
StrCpy $SETTINGSDIRECTORY "$EXEDIR\$0"
${ReadINIStrWithDefault} $0 "$INIPATH\${NAME}.ini" "${NAME}" "PluginsDirectory" "Data\plugins"
StrCpy $PLUGINSDIRECTORY "$EXEDIR\$0"
${ReadINIStrWithDefault} $ADDITIONALPARAMETERS "$INIPATH\${NAME}.ini" "${NAME}" "AdditionalParameters" ""
${ReadINIStrWithDefault} $ALLOWMULTIPLEINSTANCES "$INIPATH\${NAME}.ini" "${NAME}" "AllowMultipleInstances" "false"
${ReadINIStrWithDefault} $SKIPCOMPREGFIX "$INIPATH\${NAME}.ini" "${NAME}" "SkipCompregFix" "false"
${ReadINIStrWithDefault} $PROGRAMEXECUTABLE "$INIPATH\${NAME}.ini" "${NAME}" "${APPNAME}Executable" "${DEFAULTEXE}"
${ReadINIStrWithDefault} $WAITFORPROGRAM "$INIPATH\${NAME}.ini" "${NAME}" "WaitFor${APPNAME}" "false"
${ReadINIStrWithDefault} $DISABLESPLASHSCREEN "$INIPATH\${NAME}.ini" "${NAME}" "DisableSplashScreen" "false"
${ReadINIStrWithDefault} $DISABLEINTELLIGENTSTART "$INIPATH\${NAME}.ini" "${NAME}" "DisableIntelligentStart" "false"
${ReadINIStrWithDefault} $LOCALHOMEPAGE "$INIPATH\${NAME}.ini" "${NAME}" "LocalHomepage" ""
${ReadINIStrWithDefault} $RUNLOCALLY "$INIPATH\${NAME}.ini" "${NAME}" "RunLocally" "false"
${If} $RUNLOCALLY == "true"
StrCpy $WAITFORPROGRAM "true"
${EndIf}
${ReadINIStrWithDefault} $bolAlwaysUse32Bit "$INIPATH\${NAME}.ini" "${NAME}" "AlwaysUse32Bit" "false"
${If} $bolAlwaysUse32Bit == "true"
StrCpy $bolAlwaysUse32Bit true
${Else}
StrCpy $bolAlwaysUse32Bit false
${EndIf}
;CheckIfDefaultDirectories:
;=== Check if default directories
StrCmp $PROGRAMDIRECTORY "$EXEDIR\App\${DEFAULTAPPDIR}" "" EndINI
StrCmp $PROFILEDIRECTORY "$EXEDIR\Data\profile" "" EndINI
StrCmp $PLUGINSDIRECTORY "$EXEDIR\Data\plugins" "" EndINI
StrCmp $SETTINGSDIRECTORY "$EXEDIR\Data\settings" "" EndINI
StrCpy $ISDEFAULTDIRECTORY "true"
EndINI:
IfFileExists "$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE" FoundProgramEXE NoProgramEXE
NoINI:
;=== No INI file, so we'll use the defaults
StrCpy $ADDITIONALPARAMETERS ""
StrCpy $ALLOWMULTIPLEINSTANCES "false"
StrCpy $SKIPCOMPREGFIX "false"
StrCpy $WAITFORPROGRAM "false"
StrCpy $PROGRAMEXECUTABLE "${DEFAULTEXE}"
StrCpy $DISABLESPLASHSCREEN "false"
StrCpy $DISABLEINTELLIGENTSTART "false"
StrCpy $bolAlwaysUse32Bit false
IfFileExists "$EXEDIR\App\${DEFAULTAPPDIR}\${DEFAULTEXE}" "" CheckPortableProgramDIR
StrCpy $PROGRAMDIRECTORY "$EXEDIR\App\${DEFAULTAPPDIR}"
StrCpy $PROGRAMDIRECTORY64 "$EXEDIR\App\${DEFAULTAPPDIR}64"
StrCpy $PROFILEDIRECTORY "$EXEDIR\Data\profile"
StrCpy $PLUGINSDIRECTORY "$EXEDIR\Data\plugins"
StrCpy $SETTINGSDIRECTORY "$EXEDIR\Data\settings"
StrCpy $ISDEFAULTDIRECTORY "true"
Goto FoundProgramEXE
CheckPortableProgramDIR:
IfFileExists "$EXEDIR\${NAME}\App\${DEFAULTAPPDIR}\${DEFAULTEXE}" "" NoProgramEXE
StrCpy $PROGRAMDIRECTORY "$EXEDIR\${NAME}\App\${DEFAULTAPPDIR}"
StrCpy $PROGRAMDIRECTORY64 "$EXEDIR\${NAME}\App\${DEFAULTAPPDIR}64"
StrCpy $PROFILEDIRECTORY "$EXEDIR\${NAME}\Data\profile"
StrCpy $PLUGINSDIRECTORY "$EXEDIR\${NAME}\Data\plugins"
StrCpy $SETTINGSDIRECTORY "$EXEDIR\${NAME}\Data\settings"
Goto FoundProgramEXE
NoProgramEXE:
;=== Program executable not where expected
StrCpy $MISSINGFILEORPATH $PROGRAMEXECUTABLE
MessageBox MB_OK|MB_ICONEXCLAMATION `$(LauncherFileNotFound)`
Abort
FoundProgramEXE:
StrCpy $ORIGINALPROFILEDIRECTORY $PROFILEDIRECTORY
IfFileExists "$APPDATA\Mozilla\Firefox\*.*" CheckUserRegistryKey
StrCpy $WAITFORPROGRAM "true"
CheckUserRegistryKey:
${registry::KeyExists} "HKCU\Software\mozilla.org" $R0
StrCmp $R0 "-1" CheckMachineRegistryKey ;=== If it doesn't exist, skip the next line
StrCpy $MOZILLAORGKEYEXISTS "true"
CheckMachineRegistryKey:
${registry::KeyExists} "HKLM\Software\mozilla.org" $R0
StrCmp $R0 "-1" CheckOtherKeys ;=== If it doesn't exist, skip the next line
StrCpy $HKLMMOZILLAORGKEYEXISTS "true"
CheckOtherKeys:
${registry::KeyExists} "HKCU\Software\Mozilla" $R0
${If} $R0 != "-1"
StrCpy $bolHKCUSoftwareMozillaExists true
${registry::KeyExists} "HKCU\Software\Mozilla\Firefox" $R0
${If} $R0 != "-1"
StrCpy $bolHKCUSoftwareMozillaFirefoxExists true
${registry::KeyExists} "HKCU\Software\Mozilla\Firefox\Crash Reporter" $R0
${If} $R0 != "-1"
StrCpy $bolHKCUSoftwareMozillaFirefoxCrashReporterExists true
${registry::Read} "HKCU\Software\Mozilla\Firefox\Crash Reporter" "SubmitCrashReport" $SubmitCrashReportBackup $R2
${EndIf}
${EndIf}
${EndIf}
${IfNot} ${FileExists} "$APPDATA\Mozilla\Firefox\Pending Pings\*.*"
StrCpy $bolPendingPingsExists false
${EndIf}
${If} ${FileExists} "$PROGRAMDATA\Mozilla\updates\*.*"
StrCpy $bolProgramDataMozillaUpdatesExists true
${Else}
StrCpy $bolProgramDataMozillaUpdatesExists false
${EndIf}
;CheckIfRunning:
;=== Check if running
StrCmp $ALLOWMULTIPLEINSTANCES "true" ProfileWork
${If} ${ProcessExists} "firefox.exe"
;=== Is launcher already running?
StrCmp $bolLauncherIsAlreadyRunning false WarnAnotherInstance
StrCpy $SECONDARYLAUNCH "true"
Goto RunProgram
${Else}
Goto CheckForCrashReports
${EndIf}
StrCmp $R0 "1" "" CheckForCrashReports
WarnAnotherInstance:
MessageBox MB_OK|MB_ICONINFORMATION `$(LauncherAlreadyRunning)`
Abort
CheckForCrashReports:
IfFileExists "$APPDATA\Mozilla\Firefox\Crash Reports\*.*" "" CheckForExtensionsDirectory
Rename "$APPDATA\Mozilla\Firefox\Crash Reports" "$APPDATA\Mozilla\Firefox\Crash Reports-BackupByFirefoxPortable"
StrCpy $CRASHREPORTSDIREXISTS "true"
StrCpy $WAITFORPROGRAM "true"
CheckForExtensionsDirectory:
IfFileExists "$APPDATA\Mozilla\Extensions\*.*" "" ProfileWork
Rename "$APPDATA\Mozilla\Extensions" "$APPDATA\Mozilla\Extensions-BackupByFirefoxPortable"
StrCpy $EXTENSIONSDIREXISTS "true"
StrCpy $WAITFORPROGRAM "true"
ProfileWork:
;=== Check for an existing profile
IfFileExists "$PROFILEDIRECTORY\prefs.js" ProfileFound
;=== No profile was found
StrCmp $ISDEFAULTDIRECTORY "true" CopyDefaultProfile CreateProfile
CopyDefaultProfile:
CreateDirectory "$EXEDIR\Data"
CreateDirectory "$EXEDIR\Data\plugins"
CreateDirectory "$EXEDIR\Data\profile"
CreateDirectory "$EXEDIR\Data\settings"
CopyFiles /SILENT $EXEDIR\App\DefaultData\plugins\*.* $EXEDIR\Data\plugins
CopyFiles /SILENT $EXEDIR\App\DefaultData\profile\*.* $EXEDIR\Data\profile
CopyFiles /SILENT $EXEDIR\App\DefaultData\settings\*.* $EXEDIR\Data\settings
GoTo ProfileFound
CreateProfile:
IfFileExists "$PROFILEDIRECTORY\*.*" ProfileFound
CreateDirectory "$PROFILEDIRECTORY"
ProfileFound:
IfFileExists "$SETTINGSDIRECTORY\FirefoxPortableSettings.ini" SettingsFound
CreateDirectory "$SETTINGSDIRECTORY"
FileOpen $R0 "$SETTINGSDIRECTORY\FirefoxPortableSettings.ini" w
FileClose $R0
WriteINIStr "$SETTINGSDIRECTORY\FirefoxPortableSettings.ini" "FirefoxPortableSettings" "LastProfileDirectory" "NONE"
SettingsFound:
${ReadINIStrWithDefault} $R0 "$SETTINGSDIRECTORY\${NAME}Settings.ini" "${NAME}Settings" "SubmitCrashReport" ""
${If} $R0 != ""
${registry::Write} "HKCU\Software\Mozilla\Firefox\Crash Reporter" "SubmitCrashReport" "$R0" "REG_DWORD" $R1
${EndIf}
;=== START INTEGRITY CHECK 1.1 PrePrimary
${If} $bolCustomIntegrityCheckStartUnsupported == true
WriteINIStr "$EXEDIR\Data\settings\${AppID}Settings.ini" "${AppID}Settings" "InvalidPackageWarningShown" $strCustomIntegrityCheckVersion
${EndIf}
;=== END INTEGRITY CHECK
;=== Check for read/write
StrCmp $RUNLOCALLY "true" DisplaySplash
ClearErrors
FileOpen $R0 "$PROFILEDIRECTORY\writetest.temp" w
IfErrors "" WriteSuccessful
;== Write failed, so we're read-only
MessageBox MB_YESNO|MB_ICONQUESTION `$(LauncherAskCopyLocal)` IDYES SwitchToRunLocally
MessageBox MB_OK|MB_ICONINFORMATION `$(LauncherNoReadOnly)`
Abort
SwitchToRunLocally:
StrCpy $RUNLOCALLY "true"
StrCpy $WAITFORPROGRAM "true"
Goto DisplaySplash
WriteSuccessful:
FileClose $R0
Delete "$PROFILEDIRECTORY\writetest.temp"
DisplaySplash:
${CheckForPlatformSplashDisable} $DISABLESPLASHSCREEN
StrCmp $DISABLESPLASHSCREEN "true" SkipSplashScreen
;=== Show the splash screen before processing the files
InitPluginsDir
File /oname=$PLUGINSDIR\splash.jpg "${NAME}.jpg"
newadvsplash::show /NOUNLOAD 2000 0 0 -1 /L $PLUGINSDIR\splash.jpg
SkipSplashScreen:
;=== Run locally if needed (aka Portable Firefox Live)
StrCmp $RUNLOCALLY "true" "" CompareProfilePath
RMDir /r "$TEMP\${NAME}\"
CreateDirectory $TEMP\${NAME}\profile
CreateDirectory $TEMP\${NAME}\plugins
CreateDirectory $TEMP\${NAME}\program
CopyFiles /SILENT $PROFILEDIRECTORY\*.* $TEMP\${NAME}\profile
StrCpy $PROFILEDIRECTORY $TEMP\${NAME}\profile
CopyFiles /SILENT $PLUGINSDIRECTORY\*.* $TEMP\${NAME}\plugins
StrCpy $PLUGINSDIRECTORY $TEMP\${NAME}\plugins
CopyFiles /SILENT $PROGRAMDIRECTORY\*.* $TEMP\${NAME}\program
StrCpy $PROGRAMDIRECTORY $TEMP\${NAME}\program
${SetFileAttributesDirectoryNormal} "$TEMP\${NAME}"
CompareProfilePath:
ReadINIStr $LASTPROFILEDIRECTORY "$SETTINGSDIRECTORY\${NAME}Settings.ini" "${NAME}Settings" "LastProfileDirectory"
StrCmp $PROFILEDIRECTORY $LASTPROFILEDIRECTORY "" RememberProfilePath
StrCmp $DISABLEINTELLIGENTSTART "true" RememberProfilePath
StrCpy $SKIPCOMPREGFIX "true"
RememberProfilePath:
WriteINIStr "$SETTINGSDIRECTORY\${NAME}Settings.ini" "${NAME}Settings" "LastProfileDirectory" "$PROFILEDIRECTORY"
;FixPrefsJs:
IfFileExists "$PROFILEDIRECTORY\prefs.js" "" FixOtherFiles
StrCmp $LASTPROFILEDIRECTORY "NONE" FixPrefsJsPart2
StrCpy $2 $LASTPROFILEDIRECTORY 1 ;Last drive letter
StrCpy $3 $PROFILEDIRECTORY 1 ;Current drive letter
StrCmp $2 $3 FixPrefsJsPart2 ;If no change, move on
;=== Replace drive letters without impacting other instances of the letter in prefs.js
${ReplaceInFileCS} "$PROFILEDIRECTORY\prefs.js" `file:///$2` `file:///$3`
${ReplaceInFileCS} "$PROFILEDIRECTORY\prefs.js" `", "$2:\\` `", "$3:\\`
FixPrefsJsPart2:
;=== Be sure the default browser check is disabled
FileOpen $0 "$PROFILEDIRECTORY\prefs.js" a
FileSeek $0 0 END
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FileWrite $0 `user_pref("browser.shell.checkDefaultBrowser", false);`
FileWriteByte $0 "13"
FileWriteByte $0 "10"
StrCmp "$LOCALHOMEPAGE" "" FixPrefsJsClose
StrCpy $3 $EXEDIR
${WordReplace} $3 "\" "/" "+" $3
FileWrite $0 `user_pref("browser.startup.homepage", "file:///$3/$LOCALHOMEPAGE");`
FileWriteByte $0 "13"
FileWriteByte $0 "10"
FixPrefsJsClose:
FileClose $0
FixOtherFiles:
StrCmp $LASTPROFILEDIRECTORY "NONE" RunProgram
${GetParent} $LASTPROFILEDIRECTORY $0
${GetParent} $0 $0
StrCpy $0 '$0\' ;last FirefoxPortable directory
${GetParent} $ORIGINALPROFILEDIRECTORY $1
${GetParent} $1 $1
StrCpy $1 '$1\' ;current FirefoxPortable directory
StrCmp $0 $1 RunProgram
${If} ${FileExists} "$PROFILEDIRECTORY\pluginreg.dat"
${ReplaceInFile} "$PROFILEDIRECTORY\pluginreg.dat" $0 $1
${EndIf}
${If} ${FileExists} "$PROFILEDIRECTORY\extensions.ini"
${ReplaceInFile} "$PROFILEDIRECTORY\extensions.ini" $0 $1
;Update extensions SQL
${EndIf}
${If} ${FileExists} "$PROFILEDIRECTORY\extensions.sqlite"
nsExec::Exec `"$EXEDIR\App\Bin\sqlite3.exe" "$PROFILEDIRECTORY\extensions.sqlite" "UPDATE addon SET descriptor = '$1' || SUBSTR(descriptor,(LENGTH('$0')+1)) WHERE descriptor LIKE '$0%';"`
${EndIf}
${If} ${FileExists} "$PROFILEDIRECTORY\mimeTypes.rdf"
${ReplaceInFile} "$PROFILEDIRECTORY\mimeTypes.rdf" $0 $1
${EndIf}
${If} ${FileExists} "$PROFILEDIRECTORY\prefs.js"
${ReplaceInFile} "$PROFILEDIRECTORY\prefs.js" $0 $1
${WordReplace} $0 "\" "/" "+" $2
${WordReplace} $1 "\" "/" "+" $3
${ReplaceInFile} "$PROFILEDIRECTORY\prefs.js" "file:///$2" "file:///$3"
${EndIf}
${If} ${FileExists} "$PROFILEDIRECTORY\extensions.json"
${WordReplace} $0 "\" "\\" "+" $2
${WordReplace} $1 "\" "\\" "+" $3
${ReplaceInFile} "$PROFILEDIRECTORY\extensions.json" "$2" "$3"
${EndIf}
${If} ${FileExists} "$PROFILEDIRECTORY\extensions.json"
${WordReplace} $0 "\" "/" "+" $2
${WordReplace} $2 " " "%20" "+" $2
${WordReplace} $1 "\" "/" "+" $3
${WordReplace} $3 " " "%20" "+" $3
${ReplaceInFile} "$PROFILEDIRECTORY\extensions.json" "$2" "$3"
${EndIf}
${If} ${FileExists} "$PROFILEDIRECTORY\extensions.json"
${WordReplace} $0 "\" "\\" "+" $2
${WordReplace} $1 "\" "\\" "+" $3
${ReplaceInFile} "$PROFILEDIRECTORY\extensions.json" "$2" "$3"
${EndIf}
${If} $LASTPROFILEDIRECTORY != $ORIGINALPROFILEDIRECTORY
${AndIf} ${FileExists} "$PROFILEDIRECTORY\addonStartup.json.lz4"
Delete "$PROFILEDIRECTORY\addonStartup.json.unpacked"
nsExec::Exec `"$EXEDIR\App\Bin\dejsonlz4.exe" "$PROFILEDIRECTORY\addonStartup.json.lz4" "$PROFILEDIRECTORY\addonStartup.json.unpacked"`
Delete "$PROFILEDIRECTORY\addonStartup.json.lz4"
${WordReplace} $0 "\" "/" "+" $2
${WordReplace} $1 "\" "/" "+" $3
${WordReplace} $2 " " "%20" "+" $2
${WordReplace} $3 " " "%20" "+" $3
${ReplaceInFile} "$PROFILEDIRECTORY\addonStartup.json.unpacked" "file:///$2" "file:///$3"
${WordReplace} $0 "\" "\\" "+" $2
${WordReplace} $1 "\" "\\" "+" $3
${ReplaceInFile} "$PROFILEDIRECTORY\addonStartup.json.unpacked" "$2" "$3"
nsExec::Exec `"$EXEDIR\App\Bin\jsonlz4.exe" "$PROFILEDIRECTORY\addonStartup.json.unpacked" "$PROFILEDIRECTORY\addonStartup.json.lz4"`
Delete "$PROFILEDIRECTORY\addonStartup.json.unpacked"
${EndIf}
${GetParent} $LASTPROFILEDIRECTORY $0
${GetParent} $0 $0
${GetParent} $0 $0
StrCpy $0 '$0\' ;last PortableApps directory
${GetParent} $ORIGINALPROFILEDIRECTORY $1
${GetParent} $1 $1
${GetParent} $1 $1
StrCpy $1 '$1\' ;current PortableApps directory
StrCmp $0 $1 RunProgram
${If} ${FileExists} "$PROFILEDIRECTORY\mimeTypes.rdf"
${ReplaceInFile} "$PROFILEDIRECTORY\mimeTypes.rdf" $0 $1
${EndIf}
RunProgram:
StrCmp $SKIPCOMPREGFIX "true" GetPassedParameters
;=== Delete component registry to ensure compatibility with all extensions
Delete $PROFILEDIRECTORY\compreg.dat
GetPassedParameters:
;=== Get any passed parameters
${GetParameters} $strPassedParameters
;=== Setup exec string
System::Call kernel32::GetCurrentProcess()i.s
System::Call kernel32::IsWow64Process(is,*i.r0)
${If} $0 != 0
${AndIf} ${FileExists} "$PROGRAMDIRECTORY64\$PROGRAMEXECUTABLE"
${AndIf} ${AtLeastWin7}
${AndIf} $bolAlwaysUse32Bit == false
StrCpy $EXECSTRING `"$PROGRAMDIRECTORY64\$PROGRAMEXECUTABLE" -profile "$PROFILEDIRECTORY"`
StrCpy $bolUsing64Bit true
${Else}
StrCpy $EXECSTRING `"$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE" -profile "$PROFILEDIRECTORY"`
StrCpy $bolUsing64Bit false
${EndIf}
${If} $strPassedParameters != ''
StrCpy $EXECSTRING `$EXECSTRING $strPassedParameters`
${EndIf}
;CheckMultipleInstances:
StrCmp $ALLOWMULTIPLEINSTANCES "true" "" AdditionalParameters
StrCpy $EXECSTRING `$EXECSTRING -no-remote`
AdditionalParameters:
StrCmp $ADDITIONALPARAMETERS "" PluginsEnvironment
;=== Additional Parameters
StrCpy $EXECSTRING `$EXECSTRING $ADDITIONALPARAMETERS`
PluginsEnvironment:
;=== Set the plugins directory if we have a path
${IfNot} ${FileExists} "$PLUGINSDIRECTORY\*.*"
StrCpy $PLUGINSDIRECTORY ""
${EndIf}
${GetParent} $EXEDIR $0
${If} $bolUsing64Bit == true
${If} ${FileExists} "$0\CommonFiles\Java64\bin\plugin2\*.*"
${If} $PLUGINSDIRECTORY != ""
StrCpy $PLUGINSDIRECTORY "$PLUGINSDIRECTORY;$0\CommonFiles\Java64\bin\plugin2"
${Else}
StrCpy $PLUGINSDIRECTORY "$0\CommonFiles\Java64\bin\plugin2"
${EndIf}
${ElseIf} ${FileExists} "$0\CommonFiles\Java64\bin\new_plugin\*.*"
${If} $PLUGINSDIRECTORY != ""
StrCpy $PLUGINSDIRECTORY "$PLUGINSDIRECTORY;$0\CommonFiles\Java64\bin\new_plugin"
${Else}
StrCpy $PLUGINSDIRECTORY "$0\CommonFiles\Java64\bin\new_plugin"
${EndIf}
${EndIf}
${Else}
${If} ${FileExists} "$0\CommonFiles\Java\bin\plugin2\*.*"
${If} $PLUGINSDIRECTORY != ""
StrCpy $PLUGINSDIRECTORY "$PLUGINSDIRECTORY;$0\CommonFiles\Java\bin\plugin2"
${Else}
StrCpy $PLUGINSDIRECTORY "$0\CommonFiles\Java\bin\plugin2"
${EndIf}
${ElseIf} ${FileExists} "$0\CommonFiles\Java\bin\new_plugin\*.*"
${If} $PLUGINSDIRECTORY != ""
StrCpy $PLUGINSDIRECTORY "$PLUGINSDIRECTORY;$0\CommonFiles\Java\bin\new_plugin"
${Else}
StrCpy $PLUGINSDIRECTORY "$0\CommonFiles\Java\bin\new_plugin"
${EndIf}
${EndIf}
${EndIf}
${If} ${FileExists} "$0\CommonFiles\Silverlight\files\*.*"
${If} $PLUGINSDIRECTORY != ""
StrCpy $PLUGINSDIRECTORY "$PLUGINSDIRECTORY;$0\CommonFiles\Silverlight\files"
${Else}
StrCpy $PLUGINSDIRECTORY "$0\CommonFiles\Silverlight\files"
${EndIf}
${EndIf}
${If} ${FileExists} "$0\CommonFiles\Flash\files\*.*"
${If} $PLUGINSDIRECTORY != ""
StrCpy $PLUGINSDIRECTORY "$PLUGINSDIRECTORY;$0\CommonFiles\Flash\files"
${Else}
StrCpy $PLUGINSDIRECTORY "$0\CommonFiles\Flash\files"
${EndIf}
${EndIf}
${If} ${FileExists} "$0\CommonFiles\BrowserPlugins\*.*"
${If} $PLUGINSDIRECTORY != ""
StrCpy $PLUGINSDIRECTORY "$PLUGINSDIRECTORY;$0\CommonFiles\BrowserPlugins"
${Else}
StrCpy $PLUGINSDIRECTORY "$0\CommonFiles\BrowserPlugins"
${EndIf}
${EndIf}
StrCmp $PLUGINSDIRECTORY "" LaunchNow
System::Call 'Kernel32::SetEnvironmentVariable(t, t) i("MOZ_PLUGIN_PATH", "$PLUGINSDIRECTORY").r0'
LaunchNow:
System::Call 'Kernel32::SetEnvironmentVariable(t, t) i("MOZ_CRASHREPORTER_DATA_DIRECTORY", "$PROFILEDIRECTORY\CrashReports").r0'
StrCmp $SECONDARYLAUNCH "true" StartProgramAndExit
StrCmp $WAITFORPROGRAM "true" "" StartProgramAndExit
SetOutPath $PROGRAMDIRECTORY
ExecWait $EXECSTRING
;CheckRunning:
StrCmp $ALLOWMULTIPLEINSTANCES "true" CheckIfRemoveLocalFiles
CheckRunning:
${ProcessWaitClose} "firefox.exe" -1 $R0
Sleep 2000
${If} ${ProcessExists} "firefox.exe"
Goto CheckRunning
${EndIf}
${If} ${ProcessExists} "updater.exe"
${GetProcessPath} "updater.exe" $R1
${If} $R1 == "$PROGRAMDIRECTORY\updater.exe"
${OrIf} $R1 == "$PROGRAMDIRECTORY64\updater.exe"
Goto CheckRunning
${EndIf}
${EndIf}
Goto CleanupRunLocally
StartProgramAndExit:
SetOutPath $PROGRAMDIRECTORY
Exec $EXECSTRING
Goto TheEnd
CleanupRunLocally:
StrCmp $RUNLOCALLY "true" "" CheckIfRemoveLocalFiles
RMDir /r "$TEMP\${NAME}\"
CheckIfRemoveLocalFiles:
${If} ${ProcessExists} "firefox.exe"
Goto TheEnd
${Else}
Goto RemoveLocalFiles
${EndIf}
RemoveLocalFiles:
StrCmp $ALLOWMULTIPLEINSTANCES "true" RemoveLocalFiles2
RMDir /r "$APPDATA\Mozilla\Firefox\Crash Reports\"
Rename "$APPDATA\Mozilla\Firefox\Crash Reports-BackupByFirefoxPortable" "$APPDATA\Mozilla\Firefox\Crash Reports"
RemoveLocalFiles2:
StrCmp $ALLOWMULTIPLEINSTANCES "true" RemoveLocalFiles3
RMDir /r "$APPDATA\Mozilla\Extensions\"
Rename "$APPDATA\Mozilla\Extensions-BackupByFirefoxPortable" "$APPDATA\Mozilla\Extensions"
RemoveLocalFiles3:
Delete "$APPDATA\Mozilla\Firefox\pluginreg.dat"
${If} $bolPendingPingsExists == false
RMDir /r "$APPDATA\Mozilla\Firefox\Pending Pings\*.*"
${EndIf}
RMDir "$APPDATA\Mozilla\Firefox\Pending Pings\" ;=== Will only delete if empty (no /r switch)
RMDir "$APPDATA\Mozilla\Firefox\Profiles\" ;=== Will only delete if empty (no /r switch)
RMDir "$APPDATA\Mozilla\Firefox\Profile\" ;=== Will only delete if empty (no /r switch)
${RMDirIfNotJunction} "$APPDATA\Mozilla\Firefox\" ;=== Will only delete if empty
RMDir "$APPDATA\Mozilla\SystemExtensionsDev\" ;=== Will only delete if empty (no /r switch)
${RMDirIfNotJunction} "$APPDATA\Mozilla\" ;=== Will only delete if empty
RMDir "$LOCALAPPDATA\Mozilla\Firefox\firefox\updates\0" ;=== Will only delete if empty (no /r switch)
RMDir "$LOCALAPPDATA\Mozilla\Firefox\firefox\updates" ;=== Will only delete if empty (no /r switch)
RMDir "$LOCALAPPDATA\Mozilla\Firefox\firefox" ;=== Will only delete if empty (no /r switch)
${RMDirIfNotJunction} "$LOCALAPPDATA\Mozilla\Firefox\" ;=== Will only delete if empty
;Remove empty directories left due to a Firefox updater bug
${If} ${FileExists} "$LOCALAPPDATA\Mozilla\updates\*.*"
FindFirst $0 $1 "$LOCALAPPDATA\Mozilla\updates\*.*"
RemoveLocalFiles3Loop:
StrCmp $1 "" RemoveLocalFiles3LoopDone
${If} ${FileExists} "$LOCALAPPDATA\Mozilla\updates\$1\*.*"
${AndIf} $1 != "."
${AndIf} $1 != ".."
RMDir "$LOCALAPPDATA\Mozilla\updates\$1"
${EndIf}
FindNext $0 $1
Goto RemoveLocalFiles3Loop
RemoveLocalFiles3LoopDone:
FindClose $0
${EndIf}
${RMDirIfNotJunction} "$LOCALAPPDATA\Mozilla\updates" ;=== Will only delete if empty (no /r switch)
${RMDirIfNotJunction} "$LOCALAPPDATA\Mozilla\" ;=== Will only delete if empty (no /r switch)
${RMDirIfNotJunction} "$LOCALAPPDATALow\Mozilla\" ;=== Will only delete if empty (no /r switch)
${If} $bolProgramDataMozillaUpdatesExists == false
RMDir /r "$PROGRAMDATA\Mozilla\updates"
${EndIf}
${RMDirIfNotJunction} "$PROGRAMDATA\Mozilla"
RMDir "$TEMP\Mozilla\mozilla-temp-files"
StrCmp $MOZILLAORGKEYEXISTS "true" RemoveMachineRegistryKey
${registry::DeleteKey} "HKEY_CURRENT_USER\Software\mozilla.org" $R0
RemoveMachineRegistryKey:
StrCmp $HKLMMOZILLAORGKEYEXISTS "true" RemoveOtherKeys
${registry::KeyExists} "HKLM\Software\mozilla.org" $R0
StrCmp $R0 "-1" RemoveOtherKeys ;=== If it doesn't exist, skip the next line
UserInfo::GetAccountType
Pop $0
StrCmp $0 "Guest" RemoveOtherKeys
StrCmp $0 "User" RemoveOtherKeys
${registry::DeleteKey} "HKLM\Software\mozilla.org" $R0
RemoveOtherKeys:
;Store the crash report setting
${registry::Read} "HKCU\Software\Mozilla\Firefox\Crash Reporter" "SubmitCrashReport" $R1 $R2
WriteINIStr "$SETTINGSDIRECTORY\${NAME}Settings.ini" "${NAME}Settings" "SubmitCrashReport" "$R1"
${If} $bolHKCUSoftwareMozillaExists == true
${If} $bolHKCUSoftwareMozillaFirefoxExists == true
${If} $bolHKCUSoftwareMozillaFirefoxCrashReporterExists == true
${registry::Write} "HKCU\Software\Mozilla\Firefox\Crash Reporter" "SubmitCrashReport" "$SubmitCrashReportBackup" "REG_DWORD" $R1
${Else}
${registry::DeleteKey} "HKCU\Software\Mozilla\Firefox\Crash Reporter" $R0
${EndIf}
${Else}
${registry::DeleteKey} "HKCU\Software\Mozilla\Firefox" $R0
${EndIf}
${Else}
${registry::DeleteKey} "HKCU\Software\Mozilla" $R0
${EndIf}
TheEnd:
${registry::Unload}
newadvsplash::stop /WAIT
SectionEnd