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): import os import subprocess import platform import _winreg import time x1 = 'AXIS Media Control Embedded' find=x1 winreg = _winreg REG_PATH1 = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" REG_PATH2 = r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" registry_key = winreg.OpenKey( winreg.HKEY_LOCAL_MACHINE, REG_PATH1, 0, winreg.KEY_READ) winreg.CloseKey(registry_key) name = [] string=[] try: registry_key = winreg.OpenKey( winreg.HKEY_LOCAL_MACHINE, REG_PATH1, 0, winreg.KEY_READ) i=0 while True: try: sub_registry_key = winreg.EnumKey(registry_key, i) newpath1 = REG_PATH1 + '\\' + sub_registry_key new_registry_key = winreg.OpenKey( winreg.HKEY_LOCAL_MACHINE, newpath1, 0, winreg.KEY_READ) try: DisplayName, getname = winreg.QueryValueEx(new_registry_key, 'DisplayName') UninstallString, getname = winreg.QueryValueEx(new_registry_key, 'UninstallString') winreg.CloseKey(new_registry_key) name.append(DisplayName) string.append( UninstallString ) except: pass i += 1 except: break except: pass try: registry_key1 = winreg.OpenKey( winreg.HKEY_LOCAL_MACHINE, REG_PATH2, 0, winreg.KEY_READ) ii=0 while True: try: sub_registry_key1 = winreg.EnumKey(registry_key1, ii) newpath2 = REG_PATH2 + '\\' + sub_registry_key1 new_registry_key1 = winreg.OpenKey( winreg.HKEY_LOCAL_MACHINE, newpath2, 0, winreg.KEY_READ) try: DisplayName1, getname = winreg.QueryValueEx(new_registry_key1, 'DisplayName') UninstallString1, getname = winreg.QueryValueEx(new_registry_key1, 'UninstallString') winreg.CloseKey(new_registry_key1) name.append(DisplayName1) string.append(UninstallString1 ) except: pass ii += 1 except: break except: pass try: registry_key2 = winreg.OpenKey( winreg.HKEY_CURRENT_USER, REG_PATH1, 0, winreg.KEY_READ) iii=0 while True: try: sub_registry_key2 = winreg.EnumKey(registry_key2, iii) newpath3 = REG_PATH1 + '\\' + sub_registry_key2 new_registry_key2 = winreg.OpenKey( winreg.HKEY_CURRENT_USER, newpath3, 0, winreg.KEY_READ) try: DisplayName2, getname = winreg.QueryValueEx(new_registry_key2, 'DisplayName') UninstallString2, getname = winreg.QueryValueEx(new_registry_key2, 'UninstallString') winreg.CloseKey(new_registry_key2) name.append( DisplayName2) string.append(UninstallString2 ) except: pass iii += 1 except: break except: pass try: registry_key3 = winreg.OpenKey( winreg.HKEY_CURRENT_USER, REG_PATH2, 0, winreg.KEY_READ) iiii=0 while True: try: sub_registry_key3 = winreg.EnumKey(registry_key3, iiii) newpath4 = REG_PATH2 + '\\' + sub_registry_key3 new_registry_key3 = winreg.OpenKey( winreg.HKEY_CURRENT_USER, newpath4, 0, winreg.KEY_READ) try: DisplayName3, getname = winreg.QueryValueEx(new_registry_key3, 'DisplayName') UninstallString3, getname = winreg.QueryValueEx(new_registry_key3, 'UninstallString') winreg.CloseKey(new_registry_key3) name.append( DisplayName3 ) string.append(UninstallString3) except: pass iiii += 1 except: break except: pass x='' out={} for i in name: if find.lower() in i.lower(): x=i if x: for k,v in zip(name,string): out[k] = v x2=out[x] ustring=x2 if not ustring is None: qstring=x2 q2string=qstring+' /qn' q3=q2string.replace("/I","/x") drive= os.environ['SystemDrive'] nstring ='"C:\\Program Files (x86)\\Axis Communications\\AXIS Media Control Embedded\\setup.exe"'+" setup.rem remove" k3 = os.popen(nstring).read() ## process=subprocess.Popen(qstring,shell=True,stdout=subprocess.PIPE) ## result=process.communicate() ## ret=process.returncode os.chdir(dir) argslist = args.split() try: subprocess.check_call(q3) time.sleep(80) 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=["AXIS Media Control Embedded Installer"] import re import _winreg blacklist=[] for i in unins: blacklist.append(i) uninstallkey='SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall' if 'PROGRAMFILES(X86)' in os.environ.keys(): reg_list=[(_winreg.HKEY_LOCAL_MACHINE,uninstallkey,_winreg.KEY_WOW64_32KEY | _winreg.KEY_READ), (_winreg.HKEY_LOCAL_MACHINE,uninstallkey,_winreg.KEY_WOW64_64KEY | _winreg.KEY_READ), (_winreg.HKEY_CURRENT_USER,uninstallkey,_winreg.KEY_WOW64_32KEY | _winreg.KEY_READ), (_winreg.HKEY_CURRENT_USER,uninstallkey,_winreg.KEY_WOW64_64KEY | _winreg.KEY_READ)] else: reg_list=[(_winreg.HKEY_LOCAL_MACHINE,uninstallkey,_winreg.KEY_READ), (_winreg.HKEY_CURRENT_USER,uninstallkey,_winreg.KEY_READ)] strun=[] list=[] for i in reg_list: reg_key=i[0] sub_key=i[1] Value=i[2] reg= _winreg.OpenKey(i[0],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 for c in list: for i in range(0,len(blacklist)): if blacklist[i] in c[0]: strun.append(c[1]) Uninstr=re.findall('{.*}',c[1]) unin_str=''.join(Uninstr) command="MsiExec.exe /X"+unin_str+" /q" unarglist2 = command.split() try: subprocess.check_call(unarglist2) 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); 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'