import os import subprocess import shutil import _winreg import time import glob 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_wise_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 try: sk = _winreg.OpenKey(root, base + "\\" + sub) try: name, _ = _winreg.QueryValueEx(sk, "DisplayName") except: _winreg.CloseKey(sk) continue _winreg.CloseKey(sk) if "Wise Registry Cleaner" in name: delete_reg_tree(root, base + "\\" + sub) except: pass try: _winreg.CloseKey(key) except: pass def wise_exists(): folders = [ r"C:\Program Files\Wise\Wise Registry Cleaner", r"C:\Program Files (x86)\Wise\Wise Registry Cleaner" ] for folder in folders: if os.path.exists(folder): return True return False def wise_registry_exists(): 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") if "Wise Registry Cleaner" in name: _winreg.CloseKey(sk) _winreg.CloseKey(key) return True except: pass _winreg.CloseKey(sk) except: pass try: _winreg.CloseKey(key) except: pass return False def kill_processes(): processes = [ "WiseRegistryCleaner.exe", "WiseRegCleaner.exe", "unins000.exe" ] for p in processes: try: subprocess.call('taskkill /F /IM "%s"' % p, shell=True) except: pass def run_uninstaller(unins): try: cmd = '"%s" /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-' % unins proc = subprocess.Popen(cmd, shell=True) while proc.poll() is None: time.sleep(2) except: pass def spm_uninstall(dir, args): kill_processes() uninstallers = [ r"C:\Program Files\Wise\Wise Registry Cleaner\unins000.exe", r"C:\Program Files (x86)\Wise\Wise Registry Cleaner\unins000.exe" ] for unins in uninstallers: if os.path.exists(unins): run_uninstaller(unins) kill_processes() safe_rmtree(r"C:\Program Files\Wise\Wise Registry Cleaner") safe_rmtree(r"C:\Program Files (x86)\Wise\Wise Registry Cleaner") safe_delete(r"C:\Users\Public\Desktop\*Wise*.lnk") safe_delete(r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\*Wise*.lnk") remove_wise_reg_entries() for i in range(30): if (not wise_exists()) and (not wise_registry_exists()): print "retcode0retcode" return time.sleep(2) print "retcode1retcode" def spm_install(dir, args): try: os.chdir(dir) subprocess.check_call(args, shell=True) 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, shell=True) print "retcode0retcode" except subprocess.CalledProcessError as e: print "retcode" + str(e.returncode) + "retcode"