import os import subprocess # dir: string -> directory where installer exist # args: string -> which includes all parameters with space delimiter def spm_install(dir, args): os.chdir(dir) argslist = args.split() try: subprocess.check_call(argslist) print 'retcode' + str(0) + 'retcode' except subprocess.CalledProcessError as e: print 'retcode' + str(e.returncode) + 'retcode' # dir: string -> directory where installer exist # args: string -> which includes all parameters with space delimiter def spm_uninstall(dir, args): os.chdir(dir) argslist = args.split() try: subprocess.check_call(argslist) print 'retcode' + str(0) + 'retcode' except subprocess.CalledProcessError as e: print 'retcode' + str(e.returncode) + 'retcode' # dir: string -> directory where installer exist # args: string -> which includes all parameters with space delimiter def spm_update(dir, args): #It uninstalls the older version which will match with the registry unins=["IDrive"] import re import _winreg import time blacklist=[] for i in unins: blacklist.append(i) def update(): count=0 if 'PROGRAMFILES(X86)' in os.environ.keys(): uninstallkey='SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall' reg_list=[(_winreg.HKEY_LOCAL_MACHINE,uninstallkey,_winreg.KEY_WOW64_32KEY | _winreg.KEY_ALL_ACCESS), (_winreg.HKEY_LOCAL_MACHINE,uninstallkey,_winreg.KEY_WOW64_64KEY | _winreg.KEY_ALL_ACCESS), (_winreg.HKEY_CURRENT_USER,uninstallkey,_winreg.KEY_WOW64_32KEY | _winreg.KEY_ALL_ACCESS), (_winreg.HKEY_CURRENT_USER,uninstallkey,_winreg.KEY_WOW64_64KEY | _winreg.KEY_ALL_ACCESS)] else: uninstallkey='SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall' reg_list=[(_winreg.HKEY_LOCAL_MACHINE,uninstallkey,_winreg.KEY_READ,_winreg.KEY_ALL_ACCESS), (_winreg.HKEY_CURRENT_USER,uninstallkey,_winreg.KEY_READ,_winreg.KEY_ALL_ACCESS)] strun=[] list=[] for i in reg_list: reg_key=i[0] sub_key=i[1] Value=i[2] ## reg = _winreg.HKEY_LOCAL_MACHINE ## k = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, i[1]) reg =_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, i[1], 0, i[2]) i=0 while True: try: key_value=_winreg.EnumKey(reg,i) path=os.path.join(sub_key,key_value) Hkey=_winreg.OpenKey(reg_key,path,0,Value) try: key,dis_name=_winreg.QueryValueEx(Hkey,'DisplayName') inlist=[key.strip(), path, sub_key] list.append(inlist) except: pass i+=1 except: break def unin(): for c in list: for i in range(0,len(blacklist)): if blacklist[i] in c[0]: try: RawKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, c[1],0,Value) (value, type) = _winreg.QueryValueEx(RawKey,"UninstallString") strun.append(value) Uninstr=re.findall('".*"',value) unin_str=''.join(Uninstr) if "C:\Program" in unin_str: command=unin_str+" /SILENT" unarglist= command.splitlines(True) unarglist2= ''.join(unarglist) else: command="MsiExec.exe /X"+unin_str+" /qn" unarglist2 = command.split() try: subprocess.check_call( unarglist2) time.sleep(20) import shutil os.unlink('C:\\Program Files\\IDriveWindows') os.rmdir('C:\\Program Files\\IDriveWindows') shutil.rmtree('C:\\Program Files\\IDriveWindows') print "sleeep start" time.sleep(100) print "sleep end" print blacklist[i] +'older Version are removed' except subprocess.CalledProcessError as e: print blacklist[i] +'older Version does not exist, uninstaller returncode:' + str(e.returncode); except: pass if count==1: pass elif count==0: unin() else: pass ## time.sleep(60) count=count+1 update() def change_version(): if 'PROGRAMFILES(X86)' in os.environ.keys(): uninstallkey='SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall' reg_list=[(_winreg.HKEY_LOCAL_MACHINE,uninstallkey,_winreg.KEY_WOW64_32KEY | _winreg.KEY_ALL_ACCESS), (_winreg.HKEY_LOCAL_MACHINE,uninstallkey,_winreg.KEY_WOW64_64KEY | _winreg.KEY_ALL_ACCESS), (_winreg.HKEY_CURRENT_USER,uninstallkey,_winreg.KEY_WOW64_32KEY | _winreg.KEY_ALL_ACCESS), (_winreg.HKEY_CURRENT_USER,uninstallkey,_winreg.KEY_WOW64_64KEY | _winreg.KEY_ALL_ACCESS)] else: uninstallkey='SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall' reg_list=[(_winreg.HKEY_LOCAL_MACHINE,uninstallkey,_winreg.KEY_READ,_winreg.KEY_ALL_ACCESS), (_winreg.HKEY_CURRENT_USER,uninstallkey,_winreg.KEY_READ,_winreg.KEY_ALL_ACCESS)] strun=[] list=[] for i in reg_list: reg_key=i[0] sub_key=i[1] Value=i[2] ## reg = _winreg.HKEY_LOCAL_MACHINE ## k = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, i[1]) reg =_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, i[1], 0, i[2]) i=0 while True: try: key_value=_winreg.EnumKey(reg,i) path=os.path.join(sub_key,key_value) Hkey=_winreg.OpenKey(reg_key,path,0,Value) try: key,dis_name=_winreg.QueryValueEx(Hkey,'DisplayName') if key.startswith ("IDrive"): key1,dis_version1=_winreg.QueryValueEx(Hkey,'DisplayVersion') Key= uninstallkey+'\\IDrive_is1' ## Here give the registry Key path. STRING Sub_Key= "DisplayVersion" ## Here give the sub Key of the registry. STRING Field= _winreg.REG_SZ ##Here give the field of it value = "6.7" ##Mention the value try: Key= r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\IDrive_is1" Registrykey= _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,Key, 0,_winreg.KEY_WRITE) _winreg.SetValueEx(Registrykey,Sub_Key,0,Field,value) _winreg.CloseKey(Registrykey) except WindowsError: print "Error" ## inlist=[key.strip(), path, sub_key] ## list.append(inlist) else: pass except: pass i+=1 except: break os.chdir(dir) argslist = args.split() try: subprocess.check_call(argslist) time.sleep(40) change_version() print 'retcode' + str(0) + 'retcode' except subprocess.CalledProcessError as e: print 'retcode' + str(e.returncode) + 'retcode'