Skip to content

Commit

Permalink
EdgeRemoval optimization and refactor (from stream today: Techie Jack) (
Browse files Browse the repository at this point in the history
#2530)

* Gracefully nuke Edge and all its associates completely.

- me: same person from the stream chat today: Techie Jack (aka: Psyirius)

- cleaner script
- removes EdgeWebView
  - most programs install it, if it's needed and not found
- removes EdgeUpdate (the updater)

* removed local copy of the RegionPolicy

- and Preprocessing refactor

* Omit Webview from Uninstall

---------

Co-authored-by: Chris Titus <[email protected]>
  • Loading branch information
psyirius and ChrisTitusTech authored Aug 7, 2024
1 parent c619d02 commit 138c5de
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 261 deletions.
1 change: 0 additions & 1 deletion IntegratedServicesRegionPolicySet.json

This file was deleted.

6 changes: 3 additions & 3 deletions config/tweaks.json
Original file line number Diff line number Diff line change
Expand Up @@ -2556,14 +2556,14 @@
},
"WPFTweaksRemoveEdge": {
"Content": "Remove Microsoft Edge",
"Description": "Removes MS Edge when it gets reinstalled by updates. Credit: Techie Jack",
"Description": "Removes MS Edge when it gets reinstalled by updates. Credit: Psyirius",
"category": "z__Advanced Tweaks - CAUTION",
"panel": "1",
"Order": "a029_",
"InvokeScript": [
"
Uninstall-WinUtilEdgeBrowser
"
Uninstall-WinUtilEdgeBrowser
"
],
"UndoScript": [
"
Expand Down
138 changes: 0 additions & 138 deletions edgeremoval.ps1

This file was deleted.

187 changes: 68 additions & 119 deletions functions/private/Uninstall-WinUtilEdgeBrowser.ps1
Original file line number Diff line number Diff line change
@@ -1,152 +1,101 @@
Function Uninstall-WinUtilEdgeBrowser {

<#
.SYNOPSIS
This will uninstall edge by changing the region to Ireland and uninstalling edge the changing it back
Uninstall the Edge Browser (Chromium) from the system in an elegant way.
.DESCRIPTION
This will switch up the region to one of the EEA countries temporarily and uninstall the Edge Browser (Chromium).
#>

$msedgeProcess = Get-Process -Name "msedge" -ErrorAction SilentlyContinue
$widgetsProcess = Get-Process -Name "widgets" -ErrorAction SilentlyContinue
# Checking if Microsoft Edge is running
if ($msedgeProcess) {
Stop-Process -Name "msedge" -Force
} else {
Write-Output "msedge process is not running."
}
# Checking if Widgets is running
if ($widgetsProcess) {
Stop-Process -Name "widgets" -Force
} else {
Write-Output "widgets process is not running."
}
function Uninstall-EdgeClient {
param (
[Parameter(Mandatory = $true)]
[string]$Key
)

function Uninstall-Process {
param (
[Parameter(Mandatory = $true)]
[string]$Key
)

$originalNation = [microsoft.win32.registry]::GetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', [Microsoft.Win32.RegistryValueKind]::String)

# Set Nation to 84 (France) temporarily
[microsoft.win32.registry]::SetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', 68, [Microsoft.Win32.RegistryValueKind]::String) | Out-Null

# credits to he3als for the Acl commands
$fileName = "IntegratedServicesRegionPolicySet.json"
$pathISRPS = [Environment]::SystemDirectory + "\" + $fileName
$aclISRPS = Get-Acl -Path $pathISRPS
$aclISRPSBackup = [System.Security.AccessControl.FileSecurity]::new()
$aclISRPSBackup.SetSecurityDescriptorSddlForm($acl.Sddl)
if (Test-Path -Path $pathISRPS) {
try {
$admin = [System.Security.Principal.NTAccount]$(New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544')).Translate([System.Security.Principal.NTAccount]).Value

$aclISRPS.SetOwner($admin)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($admin, 'FullControl', 'Allow')
$aclISRPS.AddAccessRule($rule)
Set-Acl -Path $pathISRPS -AclObject $aclISRPS

Rename-Item -Path $pathISRPS -NewName ($fileName + '.bak') -Force
}
catch {
Write-Error "[$Mode] Failed to set owner for $pathISRPS"
}
}
$originalNation = [microsoft.win32.registry]::GetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', [Microsoft.Win32.RegistryValueKind]::String)

$baseKey = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate'
$registryPath = $baseKey + '\ClientState\' + $Key
# Set Nation to any of the EEA regions temporarily
# Refer: https://learn.microsoft.com/en-us/windows/win32/intl/table-of-geographical-locations
$tmpNation = 68 # Ireland
[microsoft.win32.registry]::SetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', $tmpNation, [Microsoft.Win32.RegistryValueKind]::String) | Out-Null

if (!(Test-Path -Path $registryPath)) {
Write-Host "[$Mode] Registry key not found: $registryPath"
return
}

Remove-ItemProperty -Path $registryPath -Name "experiment_control_labels" -ErrorAction SilentlyContinue | Out-Null
$baseKey = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate'
$registryPath = $baseKey + '\ClientState\' + $Key

$uninstallString = (Get-ItemProperty -Path $registryPath).UninstallString
$uninstallArguments = (Get-ItemProperty -Path $registryPath).UninstallArguments

if ([string]::IsNullOrEmpty($uninstallString) -or [string]::IsNullOrEmpty($uninstallArguments)) {
Write-Host "[$Mode] Cannot find uninstall methods for $Mode"
return
}
if (!(Test-Path -Path $registryPath)) {
Write-Host "[$Mode] Registry key not found: $registryPath"
return
}

$uninstallArguments += " --force-uninstall --delete-profile"
# Remove the status flag
Remove-ItemProperty -Path $baseKey -Name "IsEdgeStableUninstalled" -ErrorAction SilentlyContinue | Out-Null

# $uninstallCommand = "`"$uninstallString`"" + $uninstallArguments
if (!(Test-Path -Path $uninstallString)) {
Write-Host "[$Mode] setup.exe not found at: $uninstallString"
return
}
Start-Process -FilePath $uninstallString -ArgumentList $uninstallArguments -Wait -NoNewWindow -Verbose
Remove-ItemProperty -Path $registryPath -Name "experiment_control_labels" -ErrorAction SilentlyContinue | Out-Null

# Restore Acl
if (Test-Path -Path ($pathISRPS + '.bak')) {
Rename-Item -Path ($pathISRPS + '.bak') -NewName $fileName -Force
Set-Acl -Path $pathISRPS -AclObject $aclISRPSBackup
}
$uninstallString = (Get-ItemProperty -Path $registryPath).UninstallString
$uninstallArguments = (Get-ItemProperty -Path $registryPath).UninstallArguments

# Restore Nation
[microsoft.win32.registry]::SetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', $originalNation, [Microsoft.Win32.RegistryValueKind]::String) | Out-Null

if ((Get-ItemProperty -Path $baseKey).IsEdgeStableUninstalled -eq 1) {
Write-Host "[$Mode] Edge Stable has been successfully uninstalled"
}
}
if ([string]::IsNullOrEmpty($uninstallString) -or [string]::IsNullOrEmpty($uninstallArguments)) {
Write-Host "[$Mode] Cannot find uninstall methods for $Mode"
return
}

function Uninstall-Edge {
Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
# Extra arguments to nuke it
$uninstallArguments += " --force-uninstall --delete-profile"

[microsoft.win32.registry]::SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdateDev", "AllowUninstall", 1, [Microsoft.Win32.RegistryValueKind]::DWord) | Out-Null
# $uninstallCommand = "`"$uninstallString`"" + $uninstallArguments
if (!(Test-Path -Path $uninstallString)) {
Write-Host "[$Mode] setup.exe not found at: $uninstallString"
return
}
Start-Process -FilePath $uninstallString -ArgumentList $uninstallArguments -Wait -NoNewWindow -Verbose

Uninstall-Process -Key '{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}'
# Restore Nation back to the original
[microsoft.win32.registry]::SetValue('HKEY_USERS\.DEFAULT\Control Panel\International\Geo', 'Nation', $originalNation, [Microsoft.Win32.RegistryValueKind]::String) | Out-Null

@( "$env:ProgramData\Microsoft\Windows\Start Menu\Programs",
"$env:PUBLIC\Desktop",
"$env:USERPROFILE\Desktop" ) | ForEach-Object {
$shortcutPath = Join-Path -Path $_ -ChildPath "Microsoft Edge.lnk"
if (Test-Path -Path $shortcutPath) {
Remove-Item -Path $shortcutPath -Force
# might not exist in some cases
if ((Get-ItemProperty -Path $baseKey).IsEdgeStableUninstalled -eq 1) {
Write-Host "[$Mode] Edge Stable has been successfully uninstalled"
}
}

}

function Uninstall-WebView {
Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
function Uninstall-Edge {
Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null

# Force to use system-wide WebView2
# [microsoft.win32.registry]::SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\WebView2\BrowserExecutableFolder", "*", "%%SystemRoot%%\System32\Microsoft-Edge-WebView")
[microsoft.win32.registry]::SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdateDev", "AllowUninstall", 1, [Microsoft.Win32.RegistryValueKind]::DWord) | Out-Null

Uninstall-Process -Key '{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}'
}
Uninstall-EdgeClient -Key '{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}'
}

function Uninstall-EdgeUpdate {
Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null
function Uninstall-WebView {
# FIXME: might not work on some systems

$registryPath = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate'
if (!(Test-Path -Path $registryPath)) {
Write-Host "Registry key not found: $registryPath"
return
}
$uninstallCmdLine = (Get-ItemProperty -Path $registryPath).UninstallCmdLine
Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null

if ([string]::IsNullOrEmpty($uninstallCmdLine)) {
Write-Host "Cannot find uninstall methods for $Mode"
return
Uninstall-EdgeClient -Key '{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}'
}

Write-Output "Uninstalling: $uninstallCmdLine"
Start-Process cmd.exe "/c $uninstallCmdLine" -WindowStyle Hidden -Wait
}
function Uninstall-EdgeUpdate {
# FIXME: might not work on some systems

Uninstall-Edge
# "WebView" { Uninstall-WebView }
# "EdgeUpdate" { Uninstall-EdgeUpdate }
Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge Update" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null

$registryPath = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate'
if (!(Test-Path -Path $registryPath)) {
Write-Host "Registry key not found: $registryPath"
return
}
$uninstallCmdLine = (Get-ItemProperty -Path $registryPath).UninstallCmdLine

if ([string]::IsNullOrEmpty($uninstallCmdLine)) {
Write-Host "Cannot find uninstall methods for $Mode"
return
}

Start-Process cmd.exe "/c $uninstallCmdLine" -WindowStyle Hidden -Wait
}

Uninstall-Edge
# Uninstall-WebView - WebView is needed for Visual Studio and some MS Store Games like Forza
Uninstall-EdgeUpdate
}

0 comments on commit 138c5de

Please sign in to comment.