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/WChrome64-840414730/Other/Source/GoogleChromePortable.nsi

1189 lines
34 KiB

;Copyright 2004-2019 John T. Haller
;Copyright 2008-2010 Dan Bugglin
;Website: http://portableapps.com/apps/internet/google_chrome_portable
;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 PORTABLEAPPNAME "Google Chrome Portable"
!define APPNAME "Google Chrome"
!define NAME "GoogleChromePortable"
!define VER "2.3.6.13"
!define WEBSITE "portableapps.com/apps/internet/google_chrome_portable"
!define DEFAULTEXE "chrome.exe"
!define DEFAULTAPPDIR "Chrome-bin"
!define LAUNCHERLANGUAGE "English"
!define CLSID {8A69D345-D564-463c-AFF1-A69D9E530F96}
!define CLSIDSXS {4ea16ac7-fd5a-47c3-875b-dbf4a2008c20}
; Comment out the following line to disable the splash screen.
;!define USEDEVSPLASH
;!define CHROMESXSMODE
;=== 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 "Dan Bugglin, John T. Haller"
VIAddVersionKey FileDescription "${PORTABLEAPPNAME}"
VIAddVersionKey FileVersion "${VER}"
VIAddVersionKey ProductVersion "${VER}"
VIAddVersionKey InternalName "${PORTABLEAPPNAME}"
VIAddVersionKey LegalTrademarks "Google Chrome is a product of Google, Inc. Google is a trademark of Google, Inc."
VIAddVersionKey OriginalFilename "${NAME}.exe"
;=== Runtime Switches
CRCCheck On
WindowIcon Off
SilentInstall Silent
AutoCloseWindow True
RequestExecutionLevel user
XPStyle on
Unicode false
ManifestDPIAware true
; Best Compression
SetCompress Auto
SetCompressor /SOLID lzma
SetCompressorDictSize 32
SetDatablockOptimize On
;=== Include
;!include "MUI.nsh"
!include "Attrib.nsh"
!include "Registry.nsh"
!include "FileFunc.nsh"
!include "LogicLib.nsh"
!include "TextFunc.nsh"
!insertmacro GetParameters
!include "WordFunc.nsh"
!insertmacro GetParent
!addplugindir .
!include "dialogs.nsh"
!addplugindir ChromePasswords\Release
;=== Program Icon
Icon "..\..\App\AppInfo\appicon.ico"
;;=== Icon & Stye ===
;!define MUI_ICON "..\..\App\AppInfo\appicon.ico"
;BrandingText "PortableApps.com - Your Digital Life, Anywhere<72>"
;MiscButtonText "" "" "" "$(LauncherNextButton)"
;InstallButtonText "$(LauncherNextButton)"
;=== Pages
;Page custom ShowLauncherOptions LeaveLauncherOptions ""
;!insertmacro MUI_PAGE_INSTFILES
;=== Languages
LoadLanguageFile "${NSISDIR}\Contrib\Language files\${LAUNCHERLANGUAGE}.nlf"
!include PortableApps.comLauncherLANG_${LAUNCHERLANGUAGE}.nsh
;=== Variables
Var PROGRAMDIRECTORY
Var PROFILEDIRECTORY
Var SETTINGSDIRECTORY
Var ADDITIONALPARAMETERS
Var URI
Var EXECSTRING
Var PROGRAMEXECUTABLE
!ifdef USEDEVSPLASH
Var DISABLESPLASHSCREEN
!endif
;Var DISABLEINTELLIGENTSTART
Var CACHEINTEMP
Var IMPORTJAVA
Var RUNLOCALLY
Var WAITFORPROGRAM
Var SECONDARYLAUNCH
Var MISSINGFILEORPATH
Var ChromeVer
Var OldChromeVer
!ifdef CHROMESXSMODE
Var OldChromeVer2
Var bolCLSIDSXSExists
!endif
Var TempProfileDir
Var ReadOnlyMedia
Var OldChromeAssociation
Var PortableAppsPath
Var UsePAMLanguage
Var PortablePasswords
Var MasterPassword
Var EncryptPortablePasswords
Var bolCLSIDExists
Var bolMozillaPluginsHKLMExists
Var bolMozillaPluginsHKCUExists
Var bolGoogleChromeCrashRegistryExists
Var bolGoogleChromeBeaconRegistryExists
Var bolGoogleChromeBLFinchListRegistryExists
Var bolGoogleChromeStabilityMetricsRegistryExists
Var bolSwiftShaderExists
Var bolBrowserExitCodesExists
Var bolSoftwareRemovalToolExists
Var bolCrashpadExists
Var bolRegistryExtensionsExists
Var bolRegistryPreReadFieldTrialExists
Var bolGoogleNoChromeOfferUntilHKLMRegistryExists
Var bolGoogleNoToolbarOfferUntilHKLMRegistryExists
Var bolGoogleNoChromeExtensionsHKLMRegistryExists
Var bolGoogleNoChromePreferenceMACsRegistryExists
Var bolPoliciesHKCUExists
Var bolPoliciesHKLMExists
;Var /global JavaVer
;Var /global FixJava
;Var /global OldJavaVer
;Var /global OldJavaPath
;Var /global OldJavaPath2
; Load default settings
Function INIDefaults
StrCpy $ReadOnlyMedia "false"
; The default exe can be in one of two places, find it.
${If} ${FileExists} "$EXEDIR\App\${DEFAULTAPPDIR}\${DEFAULTEXE}"
StrCpy $PROGRAMDIRECTORY "$EXEDIR\App\${DEFAULTAPPDIR}"
${Else}
${If} ${FileExists} "$EXEDIR\${NAME}\App\${DEFAULTAPPDIR}\${DEFAULTEXE}"
StrCpy $PROGRAMDIRECTORY "$EXEDIR\${NAME}\App\${DEFAULTAPPDIR}"
${EndIf}
${EndIf}
; If we fail, wait until we load the INI before erroring out. We might still find it.
StrCpy $ADDITIONALPARAMETERS ""
StrCpy $WAITFORPROGRAM "true"
StrCpy $PROGRAMEXECUTABLE "${DEFAULTEXE}"
StrCpy $RUNLOCALLY "false"
!ifdef USEDEVSPLASH
StrCpy $DISABLESPLASHSCREEN "false"
!endif
; StrCpy $DISABLEINTELLIGENTSTART "false"
StrCpy $PROFILEDIRECTORY "$EXEDIR\Data\profile"
StrCpy $SETTINGSDIRECTORY "$EXEDIR\Data\settings"
StrCpy $CACHEINTEMP "true"
StrCpy $IMPORTJAVA "false"
StrCpy $UsePAMLanguage "true"
StrCpy $PortablePasswords "false"
StrCpy $EncryptPortablePasswords "true"
FunctionEnd
; Read in INI settings
Function ReadINI
; Prepopulate with default values
Call INIDefaults
${IfNot} ${FileExists} "$EXEDIR\${NAME}.ini"
; No INI
Return
${EndIf}
; Only read in present values
ReadINIStr $0 "$EXEDIR\${NAME}.ini" "${NAME}" "${APPNAME}Directory"
${If} $0 != ""
StrCpy $PROGRAMDIRECTORY "$EXEDIR\$0"
${EndIf}
ReadINIStr $0 "$EXEDIR\${NAME}.ini" "${NAME}" "ProfileDirectory"
${If} $0 != ""
StrCpy $PROFILEDIRECTORY "$EXEDIR\$0"
${EndIf}
ReadINIStr $0 "$EXEDIR\${NAME}.ini" "${NAME}" "SettingsDirectory"
${If} $0 != ""
StrCpy $SETTINGSDIRECTORY "$EXEDIR\$0"
${EndIf}
ReadINIStr $0 "$EXEDIR\${NAME}.ini" "${NAME}" "AdditionalParameters"
${If} $0 != ""
StrCpy $ADDITIONALPARAMETERS $0
${EndIf}
ReadINIStr $0 "$EXEDIR\${NAME}.ini" "${NAME}" "${APPNAME}Executable"
${If} $0 != ""
StrCpy $PROGRAMEXECUTABLE $0
${EndIf}
ReadINIStr $0 "$EXEDIR\${NAME}.ini" "${NAME}" "WaitForProgram"
${If} $0 != ""
StrCpy $WAITFORPROGRAM $0
${EndIf}
!ifdef USEDEVSPLASH
ReadINIStr $0 "$EXEDIR\${NAME}.ini" "${NAME}" "DisableSplashScreen"
${If} $0 != ""
StrCpy $DISABLESPLASHSCREEN $0
${EndIf}
!endif
; ReadINIStr $0 "$EXEDIR\${NAME}.ini" "${NAME}" "DisableIntelligentStart"
; ${If} $0 != ""
; StrCpy $DISABLEINTELLIGENTSTART $0
; ${EndIf}
ReadINIStr $0 "$EXEDIR\${NAME}.ini" "${NAME}" "RunLocally"
${If} $0 != ""
StrCpy $RUNLOCALLY $0
${EndIf}
ReadINIStr $0 "$EXEDIR\${NAME}.ini" "${NAME}" "CacheInTemp"
${If} $0 != ""
StrCpy $CACHEINTEMP $0
${EndIf}
ReadINIStr $0 "$EXEDIR\${NAME}.ini" "${NAME}" "ImportJava"
${If} $0 != ""
StrCpy $IMPORTJAVA $0
${EndIf}
ReadINIStr $0 "$EXEDIR\${NAME}.ini" "${NAME}" "UsePAMLanguage"
${If} $0 != ""
StrCpy $UsePAMLanguage $0
${EndIf}
ReadINIStr $0 "$EXEDIR\${NAME}.ini" "${NAME}" "PortablePasswords"
${If} $0 != ""
StrCpy $PortablePasswords $0
${EndIf}
ReadINIStr $0 "$EXEDIR\${NAME}.ini" "${NAME}" "EncryptPortablePasswords"
${If} $0 != ""
StrCpy $EncryptPortablePasswords $0
${EndIf}
; Missing values produce errors, clear them.
ClearErrors
FunctionEnd
Function CheckForProgram
; Make sure the program is there
${IfNot} ${FileExists} "$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE"
StrCpy $MISSINGFILEORPATH $PROGRAMEXECUTABLE
MessageBox MB_OK|MB_ICONEXCLAMATION `$(LauncherFileNotFound)`
Abort
${EndIf}
FunctionEnd
; Check to see if the portable device is writable
Function CheckWritable
ClearErrors
FileOpen $R0 "$PROGRAMDIRECTORY\writetest.temp" w
${If} ${Errors}
ClearErrors
StrCpy $ReadOnlyMedia "true"
; Ask the user if they want to copy their profile locally
MessageBox MB_YESNO|MB_ICONQUESTION `$(LauncherAskCopyLocal)` IDYES EndMessageBox1
MessageBox MB_OK|MB_ICONINFORMATION `$(LauncherNoReadOnly)`
Abort
EndMessageBox1:
; Return a value for $RUNLOCALLY
Push "true"
Return
${EndIf}
FileClose $R0
Delete "$PROGRAMDIRECTORY\writetest.temp"
; Return a value for $RUNLOCALLY
Push "false"
FunctionEnd
; Copy the profile locally
Function CopyLocal
RMDir /r "$TEMP\${NAME}\"
CreateDirectory $TEMP\${NAME}\profile
CopyFiles /SILENT $PROFILEDIRECTORY\*.* $TEMP\${NAME}\profile
Push $TEMP\${NAME}
Call Attrib
FunctionEnd
; Get the chrome version, and read and cache the local chrome settings from registry
Function GetChromeSettings
${Locate} "$PROGRAMDIRECTORY" "/L=D /M=*.*.*.* /G=0" "FoundDir"
ReadRegStr $OldChromeVer HKCU "Software\Google\Update\Clients\${CLSID}" "pv"
WriteRegStr HKCU "Software\Google\Update\Clients\${CLSID}" "pv" $ChromeVer
!ifdef CHROMESXSMODE
ReadRegStr $OldChromeVer2 HKCU "Software\Google\Update\Clients\${CLSIDSXS}" "pv"
WriteRegStr HKCU "Software\Google\Update\Clients\${CLSIDSXS}" "pv" $ChromeVer
!endif
ReadRegStr $OldChromeAssociation HKCR Applications\chrome.exe\shell\open\command ""
FunctionEnd
Function FoundDir
; Locate is buggy and incorrectly trests *.* as * so we have to check ourselves to see if the mask actually matched!
${WordFind} $R7 "." "*" $R0
${If} $R0 == "3"
StrCpy $ChromeVer $R7
${EndIf}
Push $0
FunctionEnd
; Move a local profile back (unless running from CD) and clean up
Function MoveProfileBack
; Keep deleted files from reappearing on portable device
RMDir /r $TempProfileDir
CreateDirectory $TempProfileDir
; Excludes cache files which we don't care about
FindFirst $0 $1 "$TEMP\${NAME}\profile\*"
${While} $1 != ""
${If} ${FileExists} "$TEMP\${NAME}\profile\$1\Cache"
RMDir /r "$TEMP\${NAME}\profile\$1\Cache"
${EndIf}
${If} ${FileExists} "$TEMP\${NAME}\profile\$1\Media Cache"
RMDir /r "$TEMP\${NAME}\profile\$1\Media Cache"
${EndIf}
FindNext $0 $1
${EndWhile}
FindClose $0
CopyFiles /SILENT "$TEMP\${NAME}\profile\*" "$TempProfileDir"
RMDir /r "$TEMP\${NAME}\profile\"
FunctionEnd
Function SetUpAdditionalPlugins
${GetParent} $EXEDIR $PortableAppsPath
${If} ${FileExists} "$PortableAppsPath\CommonFiles\Java\bin\plugin2\*.*"
System::Call 'Kernel32::SetEnvironmentVariable(t, t) i("JAVA_HOME", "$PortableAppsPath\CommonFiles\Java").r0'
StrCpy $ADDITIONALPARAMETERS `$ADDITIONALPARAMETERS --extra-plugin-dir="$PortableAppsPath\CommonFiles\Java\bin\plugin2"`
${ElseIf} ${FileExists} "$PortableAppsPath\CommonFiles\Java\bin\new_plugin\*.*"
System::Call 'Kernel32::SetEnvironmentVariable(t, t) i("JAVA_HOME", "$PortableAppsPath\CommonFiles\Java").r0'
StrCpy $ADDITIONALPARAMETERS `$ADDITIONALPARAMETERS --extra-plugin-dir="$PortableAppsPath\CommonFiles\Java\bin\new_plugin"`
${EndIf}
${If} ${FileExists} "$PortableAppsPath\CommonFiles\Silverlight\files\*.*"
StrCpy $ADDITIONALPARAMETERS `$ADDITIONALPARAMETERS --extra-plugin-dir="$PortableAppsPath\CommonFiles\Silverlight\files"`
${EndIf}
${If} ${FileExists} "$PortableAppsPath\CommonFiles\Flash\files\*.*"
StrCpy $ADDITIONALPARAMETERS `$ADDITIONALPARAMETERS --extra-plugin-dir="$PortableAppsPath\CommonFiles\Flash\files"`
${EndIf}
${If} ${FileExists} "$PortableAppsPath\CommonFiles\BrowserPlugins\*.*"
StrCpy $ADDITIONALPARAMETERS `$ADDITIONALPARAMETERS --extra-plugin-dir="$PortableAppsPath\CommonFiles\BrowserPlugins"`
${EndIf}
FunctionEnd
; Get the language code from PortableApps Menu, if provided
Function GetLanguageCode
${WordFind} $ADDITIONALPARAMETERS "--lang=" * $R0
${If} $R0 > 0
Push ""
Return
${EndIf}
ClearErrors
ReadEnvStr $R0 "PortableApps.comLanguageCode"
${If} ${Errors}
Push ""
Return
${EndIf}
${If} ${FileExists} "$PROGRAMDIRECTORY\$ChromeVer\Locales\$R0.dll"
Push $R0
Return
${EndIf}
${WordFind} $R0 "-" "+1" $R0
${If} $R0 == ""
Push ""
Return
${EndIf}
${If} ${FileExists} "$PROGRAMDIRECTORY\$ChromeVer\Locales\$R0.dll"
Push $R0
Return
${EndIf}
Push ""
Return
FunctionEnd
; http://nsis.sourceforge.net/Remove_leading_and_trailing_whitespaces_from_a_string
; Re-implemented using LogicLib
Function LTrim
Exch $R1 ; Original string
Push $R2
${While} 1 == 1
StrCpy $R2 $R1 1
${Select} $R2
${Case4} " " "$\r" "$\n" "$\t"
StrCpy $R1 $R1 "" 1
${Continue}
${CaseElse}
${Break}
${EndSelect}
${EndWhile}
Pop $R2
Exch $R1
FunctionEnd
Function RTrim
Exch $R1 ; Original string
Push $R2
${While} 1 == 1
StrCpy $R2 $R1 1 -1
${Select} $R2
${Case4} " " "$\r" "$\n" "$\t"
StrCpy $R1 $R1 -1
${Continue}
${CaseElse}
${Break}
${EndSelect}
${EndWhile}
Pop $R2
Exch $R1
FunctionEnd
Function Trim
Call LTrim
Call RTrim
FunctionEnd
; http://nsis.sourceforge.net/Another_String_Replace_(and_Slash/BackSlash_Converter)#StrRep
; I'm not even gonna try to rewrite this with LogicLib, I'd probably break it
Function StrRep
Exch $R4 ; $R4 = Replacement String
Exch
Exch $R3 ; $R3 = String to replace (needle)
Exch 2
Exch $R1 ; $R1 = String to do replacement in (haystack)
Push $R2 ; Replaced haystack
Push $R5 ; Len (needle)
Push $R6 ; len (haystack)
Push $R7 ; Scratch reg
StrCpy $R2 ""
StrLen $R5 $R3
StrLen $R6 $R1
loop:
StrCpy $R7 $R1 $R5
StrCmp $R7 $R3 found
StrCpy $R7 $R1 1 ; - optimization can be removed if U know len needle=1
StrCpy $R2 "$R2$R7"
StrCpy $R1 $R1 $R6 1
StrCmp $R1 "" done loop
found:
StrCpy $R2 "$R2$R4"
StrCpy $R1 $R1 $R6 $R5
StrCmp $R1 "" done loop
done:
StrCpy $R3 $R2
Pop $R7
Pop $R6
Pop $R5
Pop $R2
Pop $R1
Pop $R4
Exch $R3
FunctionEnd
; Fixes a Google Chrome preferences' file paths
Function FixPreferences
Pop $R8 ; Profile name
Pop $R1 ; New filename
Pop $R0 ; Old filename
StrCpy $R2 "" ; Location stack
ClearErrors
FileOpen $R3 $R0 r ; Open old file for read
${If} ${Errors}
Return ; Skip on error
${EndIf}
ClearErrors
FileOpen $R4 $R1 w ; Open new file for write
${If} ${Errors}
FileClose $R3
Return ; Skip on error
${EndIf}
${While} 1 == 1 ; While we still have stuff to read
ClearErrors
FileRead $R3 $R5
${If} ${Errors} ; EOF, we're done
FileClose $R3
FileClose $R4
Return
${EndIf}
StrCpy $R6 $R5
Push $R6
Call Trim
Pop $R6
StrCpy $R7 $R6 1 -1 ; Get the character at the end of the line
${If} $R7 == "{" ; Entering a section
ClearErrors
${WordFind} $R5 '"' E+2 $R7
${IfNot} ${Errors}
${StrFilter} $R7 - "" "" $R7
${If} $R2 == ""
StrCpy $R2 $R7 ; Push on the stack
${Else}
StrCpy $R2 "$R2 $R7" ; Push on the stack
${EndIf}
${EndIf}
${Else}
StrCpy $R7 $R6 1 ; Get the character at the start
${If} $R7 == "}" ; Leaving a section
ClearErrors
${WordFind} $R2 ' ' E-1{{ $R2 ; Pop the stack
${If} ${Errors}
StrCpy $R2 ""
${Else}
Push $R2
Call Trim
Pop $R2
${EndIf}
${ElseIf} $R2 == "extensions theme images"
; We want to manipulate paths in this section!
ClearErrors
${WordFind} $R5 '": "' E+2{{ $R6 ; Part before the path
${IfNot} ${Errors}
StrCpy $R7 "\\$R8\\Extensions\\"
; A substring to look for
; Double slashes are intentional, for some reason they
; are escaped in Preferences
ClearErrors
${WordFind} $R5 $R7 E-1 $R9
; Is it in the string?
; If so we want what comes after it (image filename).
${If} ${Errors}
; If not, we check for the other possibility
; Don't wanna use just $R8 cause it could be
; any generic name that could appear multiple
; times... trouble!
StrCpy $R7 "\\$R8\\Cached Theme Images\\"
ClearErrors
${WordFind} $R5 $R7 E-1 $R9
${If} ${Errors}
StrCpy $R9 ""
${EndIf}
${EndIf}
${If} $R9 != ""
Push $PROFILEDIRECTORY ; Get the new path
Push "\"
Push "\\"
Call StrRep
Pop $9
; Escape backslashes. Since paths can't
; contain quotes there's no reason to escape
; anything else AFAIK.
StrCpy $R5 $R6$9$R7$R9
; R6 is what comes before, R7 and R9 what
; after. So put it all together.
${EndIf}
${EndIf}
${EndIf}
${EndIf}
FileWrite $R4 $R5
${EndWhile}
FunctionEnd
; Iterates through all Preferences (technically a Chrome profile may contain serveral)
Function FixAllPreferences
FindFirst $8 $7 "$PROFILEDIRECTORY\*"
${While} $7 != ""
${If} ${FileExists} "$PROFILEDIRECTORY\$7\Preferences"
Push "$PROFILEDIRECTORY\$7\Preferences"
Push "$PROFILEDIRECTORY\$7\Preferences.GCP"
Push "$7"
Call FixPreferences
Delete "$PROFILEDIRECTORY\$7\Preferences"
Rename "$PROFILEDIRECTORY\$7\Preferences.GCP" "$PROFILEDIRECTORY\$7\Preferences"
${EndIf}
FindNext $8 $7
${EndWhile}
FindClose $8
FunctionEnd
; Imports all passwords stored in Passwords Portable for use in Google Chrome by decrypting them with the master password and then re-encrypting them with the local user account.
Function ImportPasswords
${If} $PortablePasswords != "true"
Return
${EndIf}
FindFirst $8 $7 "$PROFILEDIRECTORY\*"
${While} $7 != ""
${If} ${FileExists} "$PROFILEDIRECTORY\$7\Portable Passwords"
${AndIf} ${FileExists} "$PROFILEDIRECTORY\$7\Login Data"
ChromePasswords::ImportPasswords "$PROFILEDIRECTORY\$7\Portable Passwords" "$PROFILEDIRECTORY\$7\Login Data" $MasterPassword
${EndIf}
FindNext $8 $7
${EndWhile}
FindClose $8
FunctionEnd
; Exports all passwords stored in Login Data by decrypting using the local user account and encrypting using our master password.
Function ExportPasswords
${If} $PortablePasswords != "true"
Return
${EndIf}
FindFirst $8 $7 "$PROFILEDIRECTORY\*"
${While} $7 != ""
${If} ${FileExists} "$PROFILEDIRECTORY\$7\Login Data"
ChromePasswords::ExportPasswords "$PROFILEDIRECTORY\$7\Login Data" "$PROFILEDIRECTORY\$7\Portable Passwords" $MasterPassword
${EndIf}
FindNext $8 $7
${EndWhile}
FindClose $8
FunctionEnd
; Run the portable app
Function RunProgram
;=== Get any passed parameters
${GetParameters} $0
${If} $CACHEINTEMP != "false"
CreateDirectory $TEMP\${NAME}
StrCpy $1 `--disk-cache-dir="$TEMP\${NAME}"`
${Else}
StrCpy $1 ""
${EndIf}
StrCpy $URI '$1 $0'
!ifdef CHROMESXSMODE
StrCpy $EXECSTRING `"$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE" --chrome-sxs --user-data-dir="$PROFILEDIRECTORY"`
!else
StrCpy $EXECSTRING `"$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE" --user-data-dir="$PROFILEDIRECTORY"`
!endif
${If} $UsePAMLanguage != "false"
Call GetLanguageCode
Pop $0
${If} $0 != ""
StrCpy $EXECSTRING `$EXECSTRING --lang=$0`
${EndIf}
${EndIf}
${If} $SECONDARYLAUNCH != "true"
Call SetUpAdditionalPlugins
Call FixAllPreferences
Call ImportPasswords
${registry::SaveKey} HKEY_CURRENT_USER\Software\Google\Common\Rlz $TEMP\${NAME}\rlz.reg "/A=0 /D=1 /G=1 /B=0" $0
DeleteRegKey HKCU "Software\Google\Common\Rlz"
ClearErrors
${If} ${FileExists} "$LOCALAPPDATA\Google\Chrome\User Data\Crashpad"
StrCpy $bolCrashpadExists true
${EndIf}
${If} ${FileExists} "$LOCALAPPDATA\Google\Chrome\User Data\SwiftShader"
StrCpy $bolSwiftShaderExists true
${EndIf}
${registry::KeyExists} "HKCU\SOFTWARE\MozillaPlugins" $0
${If} $0 == -1
StrCpy $bolMozillaPluginsHKCUExists false
${Else}
StrCpy $bolMozillaPluginsHKCUExists true
${EndIf}
${registry::KeyExists} "HKLM\SOFTWARE\MozillaPlugins" $0
${If} $0 == -1
StrCpy $bolMozillaPluginsHKLMExists false
${Else}
StrCpy $bolMozillaPluginsHKLMExists true
${EndIf}
${registry::KeyExists} "HKCU\Software\Google\Chrome\BrowserCrashDumpAttempts" $0
${If} $0 == -1
StrCpy $bolGoogleChromeCrashRegistryExists false
${Else}
StrCpy $bolGoogleChromeCrashRegistryExists true
${EndIf}
${registry::KeyExists} "HKCU\Software\Google\Chrome\BLBeacon" $0
${If} $0 == -1
StrCpy $bolGoogleChromeBeaconRegistryExists false
${Else}
StrCpy $bolGoogleChromeBeaconRegistryExists true
${registry::MoveKey} "HKCU\Software\Google\Chrome\BLBeacon" "HKCU\Software\Google\Chrome\BLBeacon-BackupByGoogleChromePortable" $R0
${EndIf}
${registry::KeyExists} "HKCU\Software\Google\Chrome\BLFinchList" $0
${If} $0 == -1
StrCpy $bolGoogleChromeBLFinchListRegistryExists false
${Else}
StrCpy $bolGoogleChromeBLFinchListRegistryExists true
${registry::MoveKey} "HKCU\Software\Google\Chrome\BLFinchList" "HKCU\Software\Google\Chrome\BLFinchList-BackupByGoogleChromePortable" $R0
${EndIf}
${registry::KeyExists} "HKCU\Software\Google\Chrome\StabilityMetrics" $0
${If} $0 == -1
StrCpy $bolGoogleChromeStabilityMetricsRegistryExists false
${Else}
StrCpy $bolGoogleChromeStabilityMetricsRegistryExists true
${registry::MoveKey} "HKCU\Software\Google\Chrome\StabilityMetrics" "HKCU\Software\Google\Chrome\StabilityMetrics-BackupByGoogleChromePortable" $R0
${EndIf}
${registry::KeyExists} "HKCU\Software\Google\Chrome\BrowserExitCodes" $0
${If} $0 == -1
StrCpy $bolBrowserExitCodesExists false
${Else}
StrCpy $bolBrowserExitCodesExists true
${registry::MoveKey} "HKCU\Software\Google\Chrome\BrowserExitCodes" "HKCU\Software\Google\Chrome\BrowserExitCodes-BackupByGoogleChromePortable" $R0
${EndIf}
${registry::KeyExists} "HKCU\Software\Google\Software Removal Tool" $0
${If} $0 == -1
StrCpy $bolSoftwareRemovalToolExists false
${Else}
StrCpy $bolSoftwareRemovalToolExists true
${registry::MoveKey} "HKCU\Software\Google\Software Removal Tool" "HKCU\Software\Google\Software Removal Tool-BackupByGoogleChromePortable" $R0
${EndIf}
${registry::KeyExists} "HKCU\Software\Google\Chrome\Extensions" $0
${If} $0 == -1
StrCpy $bolRegistryExtensionsExists false
${Else}
StrCpy $bolRegistryExtensionsExists true
${EndIf}
${registry::KeyExists} "HKCU\Software\Google\Chrome\PreReadFieldTrial" $0
${If} $0 == -1
StrCpy $bolRegistryPreReadFieldTrialExists false
${Else}
StrCpy $bolRegistryPreReadFieldTrialExists true
${EndIf}
${registry::KeyExists} "HKCU\Software\Google\Update\ClientState\${CLSID}" $0
${If} $0 == -1
StrCpy $bolCLSIDExists false
${Else}
StrCpy $bolCLSIDExists true
${EndIf}
${registry::KeyExists} "HKLM\SOFTWARE\Google\No Chrome Offer Until" $0
${If} $0 == -1
StrCpy $bolGoogleNoChromeOfferUntilHKLMRegistryExists false
${Else}
StrCpy $bolGoogleNoChromeOfferUntilHKLMRegistryExists true
${EndIf}
${registry::KeyExists} "HKLM\SOFTWARE\Google\No Toolbar Offer Until" $0
${If} $0 == -1
StrCpy $bolGoogleNoToolbarOfferUntilHKLMRegistryExists false
${Else}
StrCpy $bolGoogleNoToolbarOfferUntilHKLMRegistryExists true
${EndIf}
${registry::KeyExists} "HKLM\SOFTWARE\Google\Chrome\Extensions" $0
${If} $0 == -1
StrCpy $bolGoogleNoChromeExtensionsHKLMRegistryExists false
${Else}
StrCpy $bolGoogleNoChromeExtensionsHKLMRegistryExists true
${EndIf}
${registry::KeyExists} "HKLM\SOFTWARE\Google\No Toolbar Offer Until" $0
${If} $0 == -1
StrCpy $bolGoogleNoToolbarOfferUntilHKLMRegistryExists false
${Else}
StrCpy $bolGoogleNoToolbarOfferUntilHKLMRegistryExists true
${EndIf}
${registry::KeyExists} "HKCU\Software\Google\Chrome\PreferenceMACs" $0
${If} $0 == -1
StrCpy $bolGoogleNoChromePreferenceMACsRegistryExists false
${Else}
StrCpy $bolGoogleNoChromePreferenceMACsRegistryExists true
${EndIf}
${registry::KeyExists} "HKCU\Software\Policies\Google\Chrome" $0
${If} $0 == -1
StrCpy $bolPoliciesHKCUExists false
${Else}
StrCpy $bolPoliciesHKCUExists true
${registry::MoveKey} "HKCU\Software\Policies\Google\Chrome" "HKCU\Software\Policies\Google\Chrome-BackupByGoogleChromePortable" $R0
${EndIf}
${registry::KeyExists} "HKLM\Software\Policies\Google\Chrome" $0
${If} $0 == -1
StrCpy $bolPoliciesHKLMExists false
${Else}
StrCpy $bolPoliciesHKLMExists true
${registry::MoveKey} "HKLM\Software\Policies\Google\Chrome" "HKLM\Software\Policies\Google\Chrome-BackupByGoogleChromePortable" $R0
${EndIf}
!ifdef CHROMESXSMODE
ClearErrors
${registry::KeyExists} "HKCU\Software\Google\Update\ClientState\${CLSIDSXS}" $0
${If} $0 == -1
${AndIf} $1 == ""
StrCpy $bolCLSIDSXSExists false
${Else}
StrCpy $bolCLSIDSXSExists true
${EndIf}
!endif
${EndIf}
${If} $ADDITIONALPARAMETERS != ""
;=== Additional Parameters
StrCpy $EXECSTRING `$EXECSTRING $ADDITIONALPARAMETERS`
${EndIf}
StrCpy $EXECSTRING `$EXECSTRING $URI`
${If} $SECONDARYLAUNCH != "true"
${AndIf} $WAITFORPROGRAM == "true"
ExecWait $EXECSTRING
CheckRunning:
Sleep 2000
FindProcDLL::FindProc "chrome.exe"
StrCmp $R0 "1" CheckRunning NoLongerRunning
NoLongerRunning:
${Else}
; Other chrome already running
Exec $EXECSTRING
Return
${EndIf}
Call ExportPasswords
${If} $RUNLOCALLY == "true"
StrCpy $0 "${NAME}.exe"
KillProc::FindProcesses
${If} $0 > 1
Return
${EndIf}
FileOpen $0 "$SETTINGSDIRECTORY\GoogleChromePortableShuttingDown" w
FileClose $0
${If} $ReadOnlyMedia != "true"
Call MoveProfileBack
${EndIf}
${EndIf}
${If} $bolCLSIDExists == false
DeleteRegKey HKCU "Software\Google\Update\ClientState\${CLSID}"
${EndIf}
!ifdef CHROMESXSMODE
${If} $bolCLSIDSXSExists == false
DeleteRegKey HKCU "Software\Google\Update\ClientState\${CLSIDSXS}"
${EndIf}
!endif
DeleteRegKey HKCU "Software\Google\Common\Rlz"
${If} ${FileExists} "$TEMP\${NAME}\rlz.reg"
;${registry::RestoreKey} $TEMP\${NAME}\rlz.reg $0
; The operation is NOT complete when it returns!
; This results in a nasty race condition when we delete $TEMP\${NAME}
; often before regedit.exe has started up, causing it to not find
; the file.
; I'll do better in one line:
ExecWait `regedit /s "$TEMP\${NAME}\rlz.reg"`
${EndIf}
EnumRegValue $0 HKLM "Software\Google\Update\ClientStateMedium\${CLSID}" 0
EnumRegValue $1 HKLM "Software\Google\Update\ClientStateMedium\${CLSID}" 1
${If} $0 == "usagestats"
${AndIf} $1 == ""
DeleteRegKey /ifempty HKLM "Software\Google\Update\ClientStateMedium\${CLSID}"
DeleteRegKey /ifempty HKLM Software\Google\Update\ClientStateMedium
${EndIf}
!ifdef CHROMESXSMODE
EnumRegValue $0 HKLM "Software\Google\Update\ClientStateMedium\${CLSIDSXS}" 0
EnumRegValue $1 HKLM "Software\Google\Update\ClientStateMedium\${CLSIDSXS}" 1
${If} $0 == "usagestats"
${AndIf} $1 == ""
DeleteRegKey /ifempty HKLM "Software\Google\Update\ClientStateMedium\${CLSIDSXS}"
DeleteRegKey /ifempty HKLM Software\Google\Update\ClientStateMedium
${EndIf}
!endif
${If} $bolMozillaPluginsHKLMExists == false
DeleteRegKey /ifempty HKLM Software\MozillaPlugins
${EndIf}
${IfNot} ${FileExists} "$LOCALAPPDATA\Google\Chrome\User Data\Local State"
SetShellVarContext current
${If} $bolSwiftShaderExists != true
RMDir /r "$LOCALAPPDATA\Google\Chrome\User Data\SwiftShader"
${EndIf}
${If} $bolCrashpadExists != true
RMDir /r "$LOCALAPPDATA\Google\Chrome\User Data\Crashpad"
${EndIf}
RMDir "$LOCALAPPDATA\Google\Chrome\User Data"
RMDir "$LOCALAPPDATA\Google\Chrome"
RMDir "$LOCALAPPDATA\Google"
; This is safe since without /r the directories will only be removed if empty
${EndIf}
${If} ${FileExists} "$PROGRAMDIRECTORY\debug.log"
Delete "$PROGRAMDIRECTORY\debug.log"
${EndIf}
${If} ${FileExists} "$TEMP\${NAME}"
RMDir /r "$TEMP\${NAME}\"
${EndIf}
${If} ${FileExists} "$SETTINGSDIRECTORY\GoogleChromePortableShuttingDown"
Delete "$SETTINGSDIRECTORY\GoogleChromePortableShuttingDown"
${EndIf}
${If} $OldChromeVer == ""
DeleteRegKey HKCU "Software\Google\Update\Clients\${CLSID}"
${Else}
WriteRegStr HKCU "Software\Google\Update\Clients\${CLSID}" "pv" $OldChromeVer
${EndIf}
!ifdef CHROMESXSMODE
${If} $OldChromeVer2 == ""
DeleteRegKey HKCU "Software\Google\Update\Clients\${CLSIDSXS}"
${Else}
WriteRegStr HKCU "Software\Google\Update\Clients\${CLSIDSXS}" "pv" $OldChromeVer2
${EndIf}
!endif
DeleteRegKey /ifempty HKCU Software\Google\Update\ClientState
DeleteRegKey /ifempty HKCU Software\Google\Update\Clients
EnumRegValue $0 HKCU Software\Google\Update 0
${If} $0 == ""
DeleteRegKey /ifempty HKCU Software\Google\Update
${EndIf}
DeleteRegKey /ifempty HKCU Software\Google\Common
${If} $bolGoogleChromeCrashRegistryExists == false
DeleteRegKey HKCU Software\Google\Chrome\BrowserCrashDumpAttempts
${EndIf}
DeleteRegKey HKCU Software\Google\Chrome\BLBeacon
${If} $bolGoogleChromeBeaconRegistryExists == true
${registry::MoveKey} "HKCU\Software\Google\Chrome\BLBeacon-BackupByGoogleChromePortable" "HKCU\Software\Google\Chrome\BLBeacon" $R0
${EndIf}
DeleteRegKey HKCU Software\Google\Chrome\BLFinchList
${If} $bolGoogleChromeBLFinchListRegistryExists == true
${registry::MoveKey} "HKCU\Software\Google\Chrome\BLFinchList-BackupByGoogleChromePortable" "HKCU\Software\Google\Chrome\BLFinchList" $R0
${EndIf}
DeleteRegKey HKCU Software\Google\Chrome\StabilityMetrics
${If} $bolGoogleChromeStabilityMetricsRegistryExists == true
${registry::MoveKey} "HKCU\Software\Google\Chrome\StabilityMetrics-BackupByGoogleChromePortable" "HKCU\Software\Google\Chrome\StabilityMetrics" $R0
${EndIf}
DeleteRegKey HKCU Software\Google\Chrome\BrowserExitCodes
${If} $bolBrowserExitCodesExists == true
${registry::MoveKey} "HKCU\Software\Google\Chrome\BrowserExitCodes-BackupByGoogleChromePortable" "HKCU\Software\Google\Chrome\BrowserExitCodes" $R0
${EndIf}
DeleteRegKey HKCU "Software\Google\Software Removal Tool"
${If} $bolSoftwareRemovalToolExists == true
${registry::MoveKey} "HKCU\Software\Google\Software Removal Tool-BackupByGoogleChromePortable" "HKCU\Software\Google\Software Removal Tool" $R0
${EndIf}
${If} $bolRegistryExtensionsExists == false
DeleteRegKey HKCU "Software\Google\Chrome\Extensions"
${EndIf}
${If} $bolRegistryPreReadFieldTrialExists == false
DeleteRegKey HKCU "Software\Google\Chrome\PreReadFieldTrial"
${EndIf}
${If} $bolGoogleNoChromeOfferUntilHKLMRegistryExists == false
DeleteRegKey HKLM "Software\Google\No Chrome Offer Until"
${EndIf}
${If} $bolGoogleNoToolbarOfferUntilHKLMRegistryExists == false
DeleteRegKey HKLM "Software\Google\No Toolbar Offer Until"
${EndIf}
${If} $bolGoogleNoChromeExtensionsHKLMRegistryExists == false
DeleteRegKey HKLM "Software\Google\Chrome\Extensions"
${EndIf}
${If} $bolGoogleNoChromePreferenceMACsRegistryExists == false
DeleteRegKey HKCU "Software\Google\Chrome\PreferenceMACs"
${EndIf}
DeleteRegKey HKCU "Software\Policies\Google\Chrome"
${If} $bolPoliciesHKCUExists == true
${registry::MoveKey} "HKCU\Software\Policies\Google\Chrome-BackupByGoogleChromePortable" "HKCU\Software\Policies\Google\Chrome" $R0
${EndIf}
DeleteRegKey HKLM "Software\Policies\Google\Chrome"
${If} $bolPoliciesHKLMExists == true
${registry::MoveKey} "HKLM\Software\Policies\Google\Chrome-BackupByGoogleChromePortable" "HKLM\Software\Policies\Google\Chrome" $R0
${EndIf}
DeleteRegKey /ifempty HKCU Software\Google\Chrome
DeleteRegKey /ifempty HKCU Software\Google
DeleteRegKey /ifempty HKLM Software\Google\Chrome
DeleteRegKey /ifempty HKLM Software\Google
${If} $bolMozillaPluginsHKCUExists == false
DeleteRegKey /ifempty HKCU Software\MozillaPlugins
${EndIf}
${If} $OldChromeAssociation == ""
DeleteRegKey HKCR Applications\chrome.exe
DeleteRegKey HKCR .htm\OpenWithList\chrome.exe
DeleteRegKey HKCR .html\OpenWithList\chrome.exe
${Else}
WriteRegStr HKCR Applications\chrome.exe\shell\open\command "" $OldChromeAssociation
${EndIf}
; ${If} $FixJava == "true"
; ${If} $OldJavaVer == ""
; DeleteRegValue HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" "BrowserJavaVersion"
; ${Else}
; WriteRegStr HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" "BrowserJavaVersion" $OldJavaVer
; ${EndIf}
;
; ${If} $OldJavaPath == ""
; DeleteRegKey HKLM "SOFTWARE\JavaSoft\Java Runtime Environment\$JavaVer"
; ${Else}
; WriteRegStr HKLM "SOFTWARE\JavaSoft\Java Runtime Environment\$JavaVer" "JavaHome" $OldJavaPath
; ${EndIf}
;
; ${If} $OldJavaPath2 == ""
; DeleteRegKey HKLM "SOFTWARE\JavaSoft\Java Plug-in\$JavaVer"
; ${Else}
; WriteRegStr HKLM "SOFTWARE\JavaSoft\Java Plug-in\$JavaVer" "JavaHome" $OldJavaPath2
; ${EndIf}
; ${EndIf}
FunctionEnd
; Read settings
Function Init
Call ReadINI
${IfNot} ${FileExists} `$PROFILEDIRECTORY\*.*`
CreateDirectory $PROFILEDIRECTORY
CopyFiles /SILENT `$EXEDIR\App\DefaultData\profile\*.*` $PROFILEDIRECTORY
${EndIf}
Call CheckForProgram
StrCpy $TempProfileDir $PROFILEDIRECTORY
StrCpy $0 "${NAME}.exe"
KillProc::FindProcesses
${If} $0 > 1
; One of these is us. If there is another, Google Chrome Portable is already running.
${If} ${FileExists} $SETTINGSDIRECTORY\GoogleChromePortableShuttingDown
; The running Google Chrome Portable is busy copying the profile back.
MessageBox MB_ICONEXCLAMATION `$(LauncherShuttingDown)`
Abort
${EndIf}
StrCpy $SECONDARYLAUNCH "true"
${EndIf}
${If} ${FileExists} $SETTINGSDIRECTORY\GoogleChromePortableShuttingDown
Delete $SETTINGSDIRECTORY\GoogleChromePortableShuttingDown
${EndIf}
${If} $RUNLOCALLY != "true"
Call CheckWritable
Pop $RUNLOCALLY
${EndIf}
StrCpy $MasterPassword ""
${If} $PortablePasswords == "true"
${AndIf} $EncryptPortablePasswords != "false"
${AndIf} $SECONDARYLAUNCH != "true"
${InputPwdBox} "$(LauncherOptionsHeader)" "$(LauncherOptionsIntro)" "" "32767" "$(LauncherOptionsOK)" "$(LauncherOptionsCancel)" 0
StrCpy $MasterPassword $0
${If} $0 == ""
Abort
${EndIf}
ChromePasswords::HashPassword $MasterPassword
Pop $0
${If} $0 == ""
MessageBox MB_ICONEXCLAMATION `$(LauncherDLLError)`
StrCpy $PortablePasswords "false"
${Else}
${If} ${FileExists} "$SETTINGSDIRECTORY\masterpassword.hash"
FileOpen $2 "$SETTINGSDIRECTORY\masterpassword.hash" r
FileRead $2 $1
FileClose $2
${If} $0 != $1
MessageBox MB_OK|MB_ICONEXCLAMATION `$(LauncherInvalidPassword)`
Abort
${EndIf}
${Else}
${IfNot} ${FileExists} $SETTINGSDIRECTORY
CreateDirectory $SETTINGSDIRECTORY
${EndIf}
FileOpen $1 "$SETTINGSDIRECTORY\masterpassword.hash" w
FileWrite $1 $0
FileClose $1
${EndIf}
${EndIf}
${EndIf}
${If} $RUNLOCALLY == "true"
${If} $SECONDARYLAUNCH != "true"
Call CopyLocal
${EndIf}
StrCpy $PROFILEDIRECTORY $TEMP\${NAME}\profile
${EndIf}
${If} $SECONDARYLAUNCH != "true"
!ifdef USEDEVSPLASH
${If} $DISABLESPLASHSCREEN != "true"
InitPluginsDir
File /oname=$PLUGINSDIR\splash.jpg "${NAME}.jpg"
newadvsplash::show /NOUNLOAD 2000 200 0 0xFF00FF /L $PLUGINSDIR\splash.jpg
${EndIf}
!endif
Call GetChromeSettings
${EndIf}
FunctionEnd
Section "Main"
Call Init
Call RunProgram
${registry::Unload}
SectionEnd