diff --git a/README.md b/README.md
index d19e51a..cafda88 100644
--- a/README.md
+++ b/README.md
@@ -1,18 +1,39 @@
+
+
+
**Microsoft Edge / Edge WebView uninstallers**
```diff
! WARNING
-Removal of Edge will cause update "KB5006670" to repeatedly fail/rollback.
+Removal of Edge will cause update "KB5006670" (2021) to repeatedly fail/rollback.
Install Edge, run Windows Updates, then remove Edge
+
+****************************************************************************************
+
+Remove-Edge.exe Remove-EdgeOnly.exe flags
+
+/s Silent Do not print anything, or change title of window
+/e Edge Only Do not remove WebView
+
```
+
+
[Remove-Edge.bat](https://github.com/ShadowWhisperer/Remove-MS-Edge/blob/main/Remove-Edge.bat) Some versions of Edge will not work with this. (Not updated) *Chrome version only
+
[Remove-Edge.exe](https://github.com/ShadowWhisperer/Remove-MS-Edge/blob/main/Remove-Edge.exe) Full uninstaller
+
[Remove-EdgeOnly.exe](https://github.com/ShadowWhisperer/Remove-MS-Edge/blob/main/Remove-EdgeOnly.exe) Does not remove WebView.
+
[Remove-Edge_GUI.exe](https://github.com/ShadowWhisperer/Remove-MS-Edge/blob/main/Remove-Edge_GUI.exe) Full uninstaller with interface (option to omit WebView)
-[_Source](https://github.com/ShadowWhisperer/Remove-MS-Edge/tree/main/_Source) contains the python script used in the executable file. [Setup.exe](https://www.virustotal.com/gui/file/4963532e63884a66ecee0386475ee423ae7f7af8a6c6d160cf1237d085adf05e) was pulled from an Edge intall.
+
-
+[_Source](https://github.com/ShadowWhisperer/Remove-MS-Edge/tree/main/_Source) contains the python script used in the executable file. [Setup.exe](https://www.virustotal.com/gui/file/4963532e63884a66ecee0386475ee423ae7f7af8a6c6d160cf1237d085adf05e) was pulled from an Edge install.
-Edge Installers: [Small DL](https://www.microsoft.com/en-us/edge/download?form=MA13FJ) / [Full DL](https://www.microsoft.com/en-us/edge/business/download?form=MA13FJ)
+
+
+Re-Install Edge: [Small DL](https://www.microsoft.com/en-us/edge/download?form=MA13FJ) / [Full DL](https://www.microsoft.com/en-us/edge/business/download?form=MA13FJ)
+
+
+
diff --git a/Remove-Edge.exe b/Remove-Edge.exe
index 70665ce..cec7961 100644
Binary files a/Remove-Edge.exe and b/Remove-Edge.exe differ
diff --git a/Remove-EdgeOnly.exe b/Remove-EdgeOnly.exe
index f21e62a..e1bb0cf 100644
Binary files a/Remove-EdgeOnly.exe and b/Remove-EdgeOnly.exe differ
diff --git a/Remove-Edge_GUI.exe b/Remove-Edge_GUI.exe
index 705ab1c..dcd7863 100644
Binary files a/Remove-Edge_GUI.exe and b/Remove-Edge_GUI.exe differ
diff --git a/_Source/gui.py b/_Source/gui.py
index f9a35c1..b844b7b 100644
--- a/_Source/gui.py
+++ b/_Source/gui.py
@@ -1,3 +1,5 @@
+#!/usr/bin/env python
+
#
# Check if ran with admin permissions
# Get Admin permissions
@@ -18,7 +20,7 @@ import ctypes #Check if ran as an admin / Window title
import getpass #Take Permissions
import os #System os paths
import sys #Check if ran as an admin
-import subprocess #Run setup.exe file
+import subprocess #Run subprocesses
import time #Wait 2 Seconds
import winreg #Modify Windows Registry (Remove Edge Appx Packages)
from tkinter import * #GUI
@@ -26,7 +28,7 @@ from tkinter.scrolledtext import ScrolledText
#GUI Settings
root = Tk()
-root.title("Bye Bye Edge - 5/23/2023 - https://github.com/ShadowWhisperer") #Windows Title
+root.title("Bye Bye Edge - 6/1/2023 - https://github.com/ShadowWhisperer") #Windows Title
root.geometry("800x500") #Windows Size (width x height)
root.iconbitmap(sys._MEIPASS + "/icon.ico") #Icon
@@ -41,6 +43,12 @@ if not is_admin():
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
os._exit(0)
+#Hide CMD/Powershell
+def hide_console():
+ startupinfo = subprocess.STARTUPINFO()
+ startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
+ startupinfo.dwFlags |= subprocess.CREATE_NO_WINDOW
+ return startupinfo
def remove_edge():
output_terminal.delete("1.0", END) #Clear Terminal
@@ -131,7 +139,7 @@ def remove_edge():
root.update()
#Startup - Active Setup
- subprocess.run(['reg', 'delete', r'HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{9459C573-B17A-45AE-9F64-1857B5D58CEE}', '/f'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+ subprocess.run(['reg', 'delete', r'HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{9459C573-B17A-45AE-9F64-1857B5D58CEE}', '/f'], startupinfo=hide_console())
#Startup Files *Wildcard
try:
@@ -144,31 +152,31 @@ def remove_edge():
except Exception:
pass
- #Tasks - Name
- result = subprocess.run(['schtasks', '/query', '/fo', 'csv'], capture_output=True, text=True, creationflags=subprocess.CREATE_NO_WINDOW)
+ # Tasks - Name
+ result = subprocess.run(['schtasks', '/query', '/fo', 'csv'], capture_output=True, text=True, startupinfo=hide_console())
tasks = result.stdout.strip().split('\n')[1:]
microsoft_edge_tasks = [task.split(',')[0].strip('"') for task in tasks if 'MicrosoftEdge' in task]
with open(os.devnull, 'w') as devnull:
for task in microsoft_edge_tasks:
output_terminal.insert(END, f" Task: {task}\n")
root.update()
- subprocess.run(['schtasks', '/delete', '/tn', task, '/f'], check=False, stdout=devnull, stderr=devnull)
+ subprocess.run(['schtasks', '/delete', '/tn', task, '/f'], check=False, stdout=devnull, stderr=devnull, startupinfo=hide_console())
- #Tasks - Files
+ # Tasks - Files
for tsks, dirs, files in os.walk(r"C:\Windows\System32\Tasks"):
- [os.remove(os.path.join(tasks, file)) for file in files if file.startswith("MicrosoftEdge")]
+ [os.remove(os.path.join(tasks, file)) for file in files if file.startswith("MicrosoftEdge")]
#Edge Update Services
service_names = ["edgeupdate", "edgeupdatem"]
for name in service_names:
- if subprocess.run(['sc', 'delete', name], capture_output=True, text=True).returncode == 0:
+ if subprocess.run(['sc', 'delete', name], capture_output=True, text=True, startupinfo=hide_console()).returncode == 0:
output_terminal.insert(END, f" Service: {name}\n")
root.update()
- subprocess.run(['reg', 'delete', r'HKLM\SYSTEM\CurrentControlSet\Services\edgeupdate', '/f'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
- subprocess.run(['reg', 'delete', r'HKLM\SYSTEM\CurrentControlSet\Services\edgeupdatem', '/f'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+ subprocess.run(['reg', 'delete', r'HKLM\SYSTEM\CurrentControlSet\Services\edgeupdate', '/f'], startupinfo=hide_console())
+ subprocess.run(['reg', 'delete', r'HKLM\SYSTEM\CurrentControlSet\Services\edgeupdatem', '/f'], startupinfo=hide_console())
#Edge Update - Remaining
- subprocess.run(['reg', 'delete', r'HKLM\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate', '/f'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+ subprocess.run(['reg', 'delete', r'HKLM\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate', '/f'], startupinfo=hide_console())
#Program Files (x86)\Microsoft\Edge\Edge.dat
os.remove(r"C:\Program Files (x86)\Microsoft\Edge\Edge.dat") if os.path.isfile(r"C:\Program Files (x86)\Microsoft\Edge\Edge.dat") else None
@@ -199,7 +207,7 @@ def remove_edge():
#Remaining Edge Keys - HKLM\SOFTWARE\WOW6432Node\Microsoft\Edge
if not os.path.exists(r"C:\Program Files (x86)\Microsoft\Edge\Application\pwahelper.exe"):
- subprocess.run(['reg', 'delete', r'HKLM\SOFTWARE\WOW6432Node\Microsoft\Edge', '/f'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+ subprocess.run(['reg', 'delete', r'HKLM\SOFTWARE\WOW6432Node\Microsoft\Edge', '/f'], stdout=subprocess.DEVNULL, startupinfo=hide_console())
#Folders - C:\Windows\SystemApps\Microsoft.MicrosoftEdge*
for directory, dirs, files in os.walk(r"C:\Windows\SystemApps"):
@@ -208,7 +216,7 @@ def remove_edge():
folder_path = os.path.join(directory, folder)
output_terminal.insert(END, f" Folder: {folder_path}\n")
root.update()
- subprocess.run('takeown /f "{}" /r /d y && icacls "{}" /grant administrators:F /t && rd /s /q "{}"'.format(folder_path, folder_path, folder_path), shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+ subprocess.run('takeown /f "{}" /r /d y && icacls "{}" /grant administrators:F /t && rd /s /q "{}"'.format(folder_path, folder_path, folder_path), startupinfo=hide_console(), shell=True)
output_terminal.insert(END, "\n\nFinished!\n", "green",)
#####################################################################################################################################
@@ -217,12 +225,6 @@ def remove_edge():
def exit_program():
sys.exit()
-#Don't show PowerShell window
-def hide_console():
- startupinfo = subprocess.STARTUPINFO()
- startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
- startupinfo.wShowWindow = subprocess.SW_HIDE
- return startupinfo
webview_var = BooleanVar()
webview_var.set(True)
diff --git a/_Source/remove.py b/_Source/remove.py
index b25ad9c..61f3ce8 100644
--- a/_Source/remove.py
+++ b/_Source/remove.py
@@ -8,56 +8,84 @@
# Check if EdgeWebView directory exists
# Run the uninstall file
#
+# Remove Edge Appx packages
# Delete desktop icons
# Delete start menu icons
-# Delete other files
-# Remove Edge Appx packages
+# Delete startup files
+# Delete tasks
+# Delete services
+# Delete other files / folders
#
import ctypes # Check if ran as an admin / Window title
import getpass # Take Permissions
import os # System OS paths
-import sys # Check if ran as an admin
+import sys # Check if ran as an admin / silent flag
import subprocess # Run setup.exe file
import winreg # Modify Windows Registry (Remove Edge Appx Packages)
import time # Wait 2 seconds
-# Set Script Title
-ctypes.windll.kernel32.SetConsoleTitleW("Bye Bye Edge")
-
# Check if running as admin
-def is_admin():
- try:
- return ctypes.windll.shell32.IsUserAnAdmin()
- except:
- return False
-if not is_admin():
+if not ctypes.windll.shell32.IsUserAnAdmin():
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
os._exit(0)
+
+# Flags
+# /s = silent (no printing)
+# /e = edge only
+silent_mode = False
+edge_only_mode = False
+
+if len(sys.argv) > 1:
+ if sys.argv[1] == '/s':
+ silent_mode = True
+ elif sys.argv[1] == '/e':
+ edge_only_mode = True
+ elif sys.argv[1] == '/?':
+ print("Usage:")
+ print(" /s Silent")
+ print(" /e Edge only")
+ print("\n")
+ sys.exit()
+else:
+ ctypes.windll.kernel32.SetConsoleTitleW("Bye Bye Edge - 6/8/2023 - https://github.com/ShadowWhisperer")
+
+
+#Hide CMD/Powershell
+def hide_console():
+ startupinfo = subprocess.STARTUPINFO()
+ startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
+ startupinfo.dwFlags |= subprocess.CREATE_NO_WINDOW
+ return startupinfo
+
+#Setup.exe location
src = os.path.join(sys._MEIPASS, "setup.exe")
################################################################################################################################################
#Edge
if os.path.exists(r"C:\Program Files (x86)\Microsoft\Edge\Application"):
- print("Removing Microsoft Edge")
+ if not silent_mode:
+ print("Removing Microsoft Edge")
cmd = [src, "--uninstall", "--system-level", "--force-uninstall"]
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, text=True)
time.sleep(2)
#EdgeWebView
-if os.path.exists(r"C:\Program Files (x86)\Microsoft\EdgeWebView\Application"):
- print("Removing WebView")
- cmd = [src, "--uninstall", "--msedgewebview", "--system-level", "--force-uninstall"]
- process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, text=True)
- time.sleep(2)
+if not edge_only_mode:
+ if os.path.exists(r"C:\Program Files (x86)\Microsoft\EdgeWebView\Application"):
+ if not silent_mode:
+ print("Removing WebView")
+ cmd = [src, "--uninstall", "--msedgewebview", "--system-level", "--force-uninstall"]
+ process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, text=True)
+ time.sleep(2)
################################################################################################################################################
#Remove Edge Appx Packages
-user_sid = subprocess.check_output(["powershell", "(Get-LocalUser -Name $env:USERNAME).SID.Value"]).decode().strip()
-output = subprocess.check_output(['powershell', '-NoProfile', '-Command', 'Get-AppxPackage -AllUsers | Where-Object {$_.PackageFullName -like "*microsoftedge*"} | Select-Object -ExpandProperty PackageFullName'])
+user_sid = subprocess.check_output(["powershell", "(Get-LocalUser -Name $env:USERNAME).SID.Value"], startupinfo=hide_console()).decode().strip()
+output = subprocess.check_output(['powershell', '-NoProfile', '-Command', 'Get-AppxPackage -AllUsers | Where-Object {$_.PackageFullName -like "*microsoftedge*"} | Select-Object -ExpandProperty PackageFullName'], startupinfo=hide_console())
edge_apps = output.decode().strip().split('\r\n')
if output:
for app in edge_apps:
@@ -65,8 +93,8 @@ if output:
key_path_local = f"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Appx\\AppxAllUserStore\\EndOfLife\\S-1-5-18\\{app}"
winreg.CreateKey(winreg.HKEY_LOCAL_MACHINE, key_path_user)
winreg.CreateKey(winreg.HKEY_LOCAL_MACHINE, key_path_local)
- subprocess.run(['powershell', '-Command', f'Remove-AppxPackage -Package {app} 2>$null'])
- subprocess.run(['powershell', '-Command', f'Remove-AppxPackage -Package {app} -AllUsers 2>$null'])
+ subprocess.run(['powershell', '-Command', f'Remove-AppxPackage -Package {app} 2>$null'], startupinfo=hide_console())
+ subprocess.run(['powershell', '-Command', f'Remove-AppxPackage -Package {app} -AllUsers 2>$null'], startupinfo=hide_console())
else:
pass
@@ -76,7 +104,7 @@ else:
subprocess.run('rmdir /q /s "C:\\ProgramData\\Microsoft\\EdgeUpdate"', shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
#Startup - Active Setup
-subprocess.run(['reg', 'delete', r'HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{9459C573-B17A-45AE-9F64-1857B5D58CEE}', '/f'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+subprocess.run(['reg', 'delete', r'HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{9459C573-B17A-45AE-9F64-1857B5D58CEE}', '/f'], startupinfo=hide_console(), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
#Desktop Icons
for dir_name in os.listdir(r"C:\Users"):
@@ -89,12 +117,12 @@ if os.path.exists(r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microso
os.remove(r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Edge.lnk")
#Tasks - Name
-result = subprocess.run(['schtasks', '/query', '/fo', 'csv'], capture_output=True, text=True, creationflags=subprocess.CREATE_NO_WINDOW)
+result = subprocess.run(['schtasks', '/query', '/fo', 'csv'], capture_output=True, text=True, startupinfo=hide_console())
tasks = result.stdout.strip().split('\n')[1:]
microsoft_edge_tasks = [task.split(',')[0].strip('"') for task in tasks if 'MicrosoftEdge' in task]
with open(os.devnull, 'w') as devnull:
for task in microsoft_edge_tasks:
- subprocess.run(['schtasks', '/delete', '/tn', task, '/f'], check=False, stdout=devnull, stderr=devnull)
+ subprocess.run(['schtasks', '/delete', '/tn', task, '/f'], check=False, stdout=devnull, stderr=devnull, startupinfo=hide_console())
#Tasks - Files
for tsks, dirs, files in os.walk(r"C:\Windows\System32\Tasks"):
@@ -103,23 +131,24 @@ for tsks, dirs, files in os.walk(r"C:\Windows\System32\Tasks"):
#Edge Update Services
service_names = ["edgeupdate", "edgeupdatem"]
for name in service_names:
- subprocess.run(['sc', 'delete', name], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
-subprocess.run(['reg', 'delete', r'HKLM\SYSTEM\CurrentControlSet\Services\edgeupdate', '/f'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
-subprocess.run(['reg', 'delete', r'HKLM\SYSTEM\CurrentControlSet\Services\edgeupdatem', '/f'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+ if subprocess.run(['sc', 'delete', name], capture_output=True, text=True, startupinfo=hide_console()).returncode == 0:
+ subprocess.run(['reg', 'delete', r'HKLM\SYSTEM\CurrentControlSet\Services\edgeupdate', '/f'], startupinfo=hide_console(), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+ subprocess.run(['reg', 'delete', r'HKLM\SYSTEM\CurrentControlSet\Services\edgeupdatem', '/f'], startupinfo=hide_console(), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
-#Edge Update - Remaining
-subprocess.run(['reg', 'delete', r'HKLM\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate', '/f'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+# Edge Update - Remaining
+subprocess.run(['reg', 'delete', r'HKLM\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate', '/f'], startupinfo=hide_console(), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
-#Remaining Edge Keys - HKLM\SOFTWARE\WOW6432Node\Microsoft\Edge
+# Remaining Edge Keys - HKLM\SOFTWARE\WOW6432Node\Microsoft\Edge
if not os.path.exists(r"C:\Program Files (x86)\Microsoft\Edge\Application\pwahelper.exe"):
- subprocess.run(['reg', 'delete', r'HKLM\SOFTWARE\WOW6432Node\Microsoft\Edge', '/f'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+ subprocess.run(['reg', 'delete', r'HKLM\SOFTWARE\WOW6432Node\Microsoft\Edge', '/f'], startupinfo=hide_console(), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
#Folders - C:\Windows\SystemApps\Microsoft.MicrosoftEdge*
for directory, dirs, files in os.walk(r"C:\Windows\SystemApps"):
for folder in dirs:
if folder.startswith("Microsoft.MicrosoftEdge"):
folder_path = os.path.join(directory, folder)
- subprocess.run('takeown /f "{}" /r /d y && icacls "{}" /grant administrators:F /t && rd /s /q "{}"'.format(folder_path, folder_path, folder_path), shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+ with open(os.devnull, "w") as devnull:
+ subprocess.run('takeown /f "{}" /r /d y && icacls "{}" /grant administrators:F /t && rd /s /q "{}"'.format(folder_path, folder_path, folder_path), startupinfo=hide_console(), shell=True, stdout=devnull, stderr=devnull)
#System32 Files
user_name = getpass.getuser()