import os import shutil import subprocess import time import glob try: import winreg except ImportError: import _winreg as winreg APPNAME = "MusicBee" def safe_rmtree(path): try: if os.path.exists(path): shutil.rmtree(path, ignore_errors=True) except: pass def safe_delete(pattern): try: for f in glob.glob(pattern): try: os.remove(f) except: pass except: pass def delete_reg_tree(root, path): try: key = winreg.OpenKey(root, path, 0, winreg.KEY_ALL_ACCESS) except: return while True: try: sub = winreg.EnumKey(key, 0) delete_reg_tree(root, path + "\\" + sub) except: break try: winreg.CloseKey(key) except: pass try: winreg.DeleteKey(root, path) except: pass def remove_musicbee_reg_entries(): locations = [ r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" ] for root in (winreg.HKEY_LOCAL_MACHINE, winreg.HKEY_CURRENT_USER): for base in locations: try: key = winreg.OpenKey(root, base) except: continue i = 0 while True: try: sub = winreg.EnumKey(key, i) i += 1 except: break sub_path = base + "\\" + sub try: sk = winreg.OpenKey(root, sub_path) try: name, _ = winreg.QueryValueEx(sk, "DisplayName") except: winreg.CloseKey(sk) continue winreg.CloseKey(sk) if APPNAME.lower() in name.lower(): delete_reg_tree(root, sub_path) except: pass try: winreg.CloseKey(key) except: pass def musicbee_exists(): paths = [ r"C:\Program Files\MusicBee", r"C:\Program Files (x86)\MusicBee" ] for p in paths: if os.path.exists(p): return True return False def spm_uninstall(dir, args): procs = ["MusicBee.exe", "MusicBeeLibrary.exe"] for proc in procs: try: subprocess.call('taskkill /F /IM "%s"' % proc, shell=True) except: pass time.sleep(2) safe_rmtree(r"C:\Program Files\MusicBee") safe_rmtree(r"C:\Program Files (x86)\MusicBee") safe_delete(r"C:\Users\Public\Desktop\*MusicBee*.lnk") safe_delete(r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\*MusicBee*.lnk") for profile in glob.glob(r"C:\Users\*"): safe_rmtree(os.path.join(profile, "AppData", "Roaming", "MusicBee")) safe_rmtree(os.path.join(profile, "AppData", "Local", "MusicBee")) remove_musicbee_reg_entries() time.sleep(2) if musicbee_exists(): print("retcode1retcode") else: print("retcode0retcode")