import os import subprocess import time import shutil import _winreg def delete_reg_key(root, path): try: _winreg.DeleteKey(root, path) except: pass def run_cmd(cmd): try: subprocess.call(cmd, shell=True) except: pass def remove_path(path): try: if os.path.isdir(path): shutil.rmtree(path, ignore_errors=True) elif os.path.isfile(path): os.remove(path) except: pass def spm_uninstall(dir, args): try: # Kill running RStudio processes processes = [ 'rstudio.exe', 'rsession.exe', 'Uninstall.exe' ] for proc in processes: run_cmd('taskkill /F /IM ' + proc) time.sleep(5) # Possible uninstall locations uninstallers = [ r'C:\Program Files\RStudio\Uninstall.exe', r'C:\Program Files\Posit\RStudio\Uninstall.exe', r'C:\Program Files\RStudio\unins000.exe', r'C:\Program Files\Posit\RStudio\unins000.exe' ] uninstalled = False # Run silent uninstall for uninstaller in uninstallers: if os.path.exists(uninstaller): cmds = [ '"' + uninstaller + '" /S', '"' + uninstaller + '" /VERYSILENT /SUPPRESSMSGBOXES /NORESTART', '"' + uninstaller + '" /quiet' ] for cmd in cmds: try: subprocess.Popen(cmd, shell=True) time.sleep(5) run_cmd('taskkill /F /IM Uninstall.exe') run_cmd('taskkill /F /IM unins000.exe') uninstalled = True except: pass # Remove remaining folders remove_paths = [ r'C:\Program Files\RStudio', r'C:\Program Files\Posit\RStudio', r'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\RStudio', r'C:\Users\Public\Desktop\RStudio.lnk' ] for path in remove_paths: remove_path(path) # Remove registry uninstall entries reg_keys = [ r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\RStudio", r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\RStudio", r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Posit RStudio", r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Posit RStudio" ] for key in reg_keys: delete_reg_key(_winreg.HKEY_LOCAL_MACHINE, key) time.sleep(5) # Final verification failed = False verify_paths = [ r'C:\Program Files\RStudio', r'C:\Program Files\Posit\RStudio' ] for path in verify_paths: if os.path.exists(path): failed = True if failed: raise Exception('Clean Uninstall Failed') print 'RStudio fully removed' print 'retcode0retcode' except Exception as e: print str(e) print 'retcode1retcode'