From 04c84dce45ffbf2f7153e312bf5eac60d7520a96 Mon Sep 17 00:00:00 2001 From: Chris Titus Date: Tue, 6 Aug 2024 15:39:46 -0500 Subject: [PATCH] Edge Removal Fix --- config/tweaks.json | 8 +- .../private/Uninstall-WinUtilEdgeBrowser.ps1 | 152 ++++++++++++++++++ 2 files changed, 155 insertions(+), 5 deletions(-) create mode 100644 functions/private/Uninstall-WinUtilEdgeBrowser.ps1 diff --git a/config/tweaks.json b/config/tweaks.json index 610e1c5e..1866dbce 100644 --- a/config/tweaks.json +++ b/config/tweaks.json @@ -2536,16 +2536,14 @@ ] }, "WPFTweaksRemoveEdge": { - "Content": "Remove Microsoft Edge - NOT RECOMMENDED", - "Description": "Removes MS Edge when it gets reinstalled by updates. Credit: AveYo", + "Content": "Remove Microsoft Edge", + "Description": "Removes MS Edge when it gets reinstalled by updates. Credit: Techie Jack", "category": "z__Advanced Tweaks - CAUTION", "panel": "1", "Order": "a029_", "InvokeScript": [ " - #:: Standalone script by AveYo Source: https://raw.githubusercontent.com/AveYo/fox/main/Edge_Removal.bat - Invoke-WebRequest -Uri \"https://raw.githubusercontent.com/ChrisTitusTech/winutil/main/edgeremoval.bat\" -OutFile \"$ENV:TEMP\\edgeremoval.bat\" - Start-Process $ENV:temp\\edgeremoval.bat + Uninstall-WinUtilEdgeBrowser " ], "UndoScript": [ diff --git a/functions/private/Uninstall-WinUtilEdgeBrowser.ps1 b/functions/private/Uninstall-WinUtilEdgeBrowser.ps1 new file mode 100644 index 00000000..3219b656 --- /dev/null +++ b/functions/private/Uninstall-WinUtilEdgeBrowser.ps1 @@ -0,0 +1,152 @@ +Function Uninstall-WinUtilEdgeBrowser { + + <# + + .SYNOPSIS + This will uninstall edge by changing the region to Ireland and uninstalling edge the changing it back + + #> + +$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-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" + } + } + + $baseKey = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate' + $registryPath = $baseKey + '\ClientState\' + $Key + + 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 + + $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 + } + + $uninstallArguments += " --force-uninstall --delete-profile" + + # $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 + + # Restore Acl + if (Test-Path -Path ($pathISRPS + '.bak')) { + Rename-Item -Path ($pathISRPS + '.bak') -NewName $fileName -Force + Set-Acl -Path $pathISRPS -AclObject $aclISRPSBackup + } + + # 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" + } +} + +function Uninstall-Edge { + Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Edge" -Name "NoRemove" -ErrorAction SilentlyContinue | Out-Null + + [microsoft.win32.registry]::SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdateDev", "AllowUninstall", 1, [Microsoft.Win32.RegistryValueKind]::DWord) | Out-Null + + Uninstall-Process -Key '{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}' + + @( "$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 + } + } + +} + +function Uninstall-WebView { + Remove-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft EdgeWebView" -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") + + Uninstall-Process -Key '{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}' +} + +function 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 + } + + Write-Output "Uninstalling: $uninstallCmdLine" + Start-Process cmd.exe "/c $uninstallCmdLine" -WindowStyle Hidden -Wait +} + +Uninstall-Edge + # "WebView" { Uninstall-WebView } + # "EdgeUpdate" { Uninstall-EdgeUpdate } + + + + +} \ No newline at end of file