import os import shutil import subprocess import _winreg import time import glob 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") remove_musicbee_reg_entries() time.sleep(2) if musicbee_exists(): print "retcode1retcode" else: print "retcode0retcode"