import os import shutil import subprocess import time import glob try: import winreg except ImportError: import _winreg as winreg 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 "MusicBee" in name: delete_reg_tree(root, sub_path) except: pass try: winreg.CloseKey(key) except: pass def musicbee_exists(): # Check folders folders = [ r"C:\Program Files\MusicBee", r"C:\Program Files (x86)\MusicBee" ] for f in folders: if os.path.exists(f): return True # Check uninstall registry 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 try: sk = winreg.OpenKey(root, base + "\\" + sub) try: name, _ = winreg.QueryValueEx(sk, "DisplayName") except: winreg.CloseKey(sk) continue winreg.CloseKey(sk) if "MusicBee" in name: return True except: pass try: winreg.CloseKey(key) except: pass return False def spm_uninstall(dir, args): # Kill MusicBee processes try: subprocess.call("taskkill /IM MusicBee.exe /F", shell=True) except: pass try: subprocess.call("taskkill /IM MusicBeeLibrary.exe /F", shell=True) except: pass time.sleep(2) # Remove installation folders safe_rmtree(r"C:\Program Files\MusicBee") safe_rmtree(r"C:\Program Files (x86)\MusicBee") # Remove Desktop shortcuts safe_delete(r"C:\Users\Public\Desktop\*MusicBee*.lnk") try: users = r"C:\Users" for u in os.listdir(users): safe_delete(os.path.join(users, u, "Desktop", "*MusicBee*.lnk")) except: pass # Remove Start Menu shortcuts safe_delete(r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\*MusicBee*.lnk") try: users = r"C:\Users" for u in os.listdir(users): path = os.path.join( users, u, r"AppData\Roaming\Microsoft\Windows\Start Menu\Programs" ) safe_delete(os.path.join(path, "*MusicBee*.lnk")) except: pass # Remove registry uninstall entries remove_musicbee_reg_entries() time.sleep(3) # FINAL RESULT if musicbee_exists(): print "retcode1retcode" else: print "retcode0retcode" def spm_install(dir, args): try: os.chdir(dir) subprocess.check_call(args.split()) print "retcode0retcode" except subprocess.CalledProcessError as e: print "retcode" + str(e.returncode) + "retcode" def spm_update(dir, args): try: os.chdir(dir) subprocess.check_call(args.split()) print "retcode0retcode" except subprocess.CalledProcessError as e: print "retcode" + str(e.returncode) + "retcode"