The Chrome web browser was the bane of my existence for an entire year.
Put simply, it wants to self-update. Any attempt to suppress this process essentially breaks it. Many will be aware that there is an Update service which can be disabled. Many are unaware that there is a scheduled task to re-enable it for you (so thoughtful!)
Additionally, there are some registry keys which must be deleted if your uninstall or upgrade attempt is to succeed. Otherwise the MSI tends to fail with a 1603 error. I also noticed while wrestling with this application that trying to uninstall it with a PowerShell script also tends to cause 1603 fails.
All of this is meant to convince us that it just isn’t worth it, and we should just accept the fact and hand over control of our update process to the vendor. While you may be prepared to live with this (I won’t judge), we still may need to remove the thing on occasion when troubleshooting.
Given my experience with 1603 errors in PowerShell, this uninstaller is written in VB script.
Uninstall.vbs
' This script performs the installation or uninstallation of an application(s).
' Created 30/07/2019 | cru2.io
'___________________________________________________________
' Variables
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Shell = CreateObject("Wscript.Shell")
Set objWMI = GetObject("winmgmts:\.\root\cimv2")
Set EnvVar = Shell.Environment("PROCESS")
Set objReg = GetObject("winmgmts:\.\root\default:StdRegProv")
Set objNetwork = CreateObject("WScript.Network")
Const ForAppending = 8
Const forReading = 1
Const ForWriting = 2
Const HKCR = &H80000000
Const HKCU = &H80000001
Const HKLM = &H80000002
Const HKU = &H80000003
Const HKCC = &H80000005
'___________________________________________________________
Dim strProcess,Q,LogFile,WorkDir,strProgramData
WorkDir = Split(WScript.ScriptFullName,WSCRIPT.ScriptName)(0)
Q = Chr(034)
strProgramData = Shell.ExpandEnvironmentStrings("%ProgramData%")
strLogName = strProgramData & "\Software\Google Chrome Universal Uninstaller.log"
'___________________________________________________________
' Start logging
If NOT FSO.FileExists(strLogName) Then CreateLogFile strLogName
LogInfo "========================= Google Chrome Universal Uninstaller ========================="
LogInfo "Machine Name: " & objNetwork.ComputerName
LogInfo "Uninstalled by: " & objNetwork.UserName
LogInfo "Uninstalled from: " & WorkDir
' Perform registry cleanup
strKeyPath = "SOFTWARE\Google\Update"
objReg.DeleteKey HKLM,strKeyPath
strKeyPath = "SOFTWARE\WOW6432Node\Google\Update"
objReg.DeleteKey HKLM,strKeyPath
strKeyPath = "SOFTWARE\Policies\Google\Update"
objReg.DeleteKey HKLM,strKeyPath
strKeyPath = "SOFTWARE\WOW6432Node\Policies\Google\Update"
objReg.DeleteKey HKLM,strKeyPath
' Uninstall Chrome versions
Shell.Run "TASKKILL /F /IM chrome.exe", , True
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
objReg.EnumKey HKLM, strKeyPath, arrSubKeys
sMatch = "Google Chrome"
For Each objSubKey In arrSubKeys
On error resume next
sDisplayName = Shell.Regread("HKLM\" & strKeyPath & "\" & objSubKey & "\DisplayName")
sDisplayVersion = Shell.Regread("HKLM\" & strKeyPath & "\" & objSubKey & "\DisplayVersion")
If err.number = 0 then
If InStr(sDisplayName, sMatch) > 0 then
On Error Resume Next
LogInfo "Uninstalling Google Chrome " & sDisplayVersion
ExitCode = Shell.Run("MsiExec.exe /X" & objSubkey & " /quiet /norestart" & Q,0,1)
If ExitCode = 0 Then LogInfo " Uninstall exit code: " & ExitCode & ". The operation completed successfully."
If ExitCode = 1603 Then LogInfo " Uninstall exit code: " & ExitCode & ". Fatal error during installation."
If ExitCode = 1605 Then LogInfo " Uninstall exit code: " & ExitCode & ". This action is only valid for products that are currently installed."
Wscript.Sleep 10000
Else
End If
End If
Next
Wscript.Quit(0)
'___________________________________________________________
' Functions
Function myTime()
myTime = DatePart("d",Now())&"/"& DatePart("m",Now())&"/"& DatePart("yyyy",Now())&" "&Time()
End Function
Function CreateLogFile(sLogfile)
Set objLogFile = FSO.OpenTextFile(strLogName, ForWriting, True)
objLogFile.WriteLine ""
objLogFile.WriteLine myTime & " : " & WScript.ScriptName & " started."
objLogFile.WriteLine ""
objLogFile.Close
Set objLogFile = Nothing
logFileCreated = True
End Function
Function LogInfo(sMsg)
If sMsg <> "" Then
text = myTime & " : " & sMsg
Else
text = ""
End If
'*** Open the log file now
Set objLogFile = FSO.OpenTextFile(strLogName, ForAppending, True)
'*** Write the text required to the file
objLogFile.WriteLine text
'*** Close the log file and clear it from memory
objLogFile.Close
Set objLogFile = Nothing
End Function