import os import subprocess import time import shutil import _winreg INSTALL_PATH = r"C:\Users\comodo\AppData\Local\Yandex\YandexBrowser\Application\browser.exe" PROCESS_NAMES = ["browser.exe", "service_update.exe", "browser_broker.exe"] def _kill_processes(names): for name in names: os.popen('Taskkill /IM "%s" /F /T' % name).read() def _yandex_installed(): return os.path.exists(INSTALL_PATH) def _yandex_registry_present(): # Yandex writes its uninstall key per-user; when the agent runs as SYSTEM # that lands under HKEY_USERS\, so walk every loaded hive. try: users_key = _winreg.OpenKey(_winreg.HKEY_USERS, "") except WindowsError: return False i = 0 found = False while True: try: sid = _winreg.EnumKey(users_key, i) except WindowsError: break i += 1 subpath = sid + r"\Software\Microsoft\Windows\CurrentVersion\Uninstall\Yandex" try: k = _winreg.OpenKey(_winreg.HKEY_USERS, subpath) _winreg.CloseKey(k) found = True break except WindowsError: continue return found # dir: string -> directory where installer exists # args: string -> all parameters, space-delimited def spm_install(dir, args): os.chdir(dir) _kill_processes(PROCESS_NAMES) # clear any stuck update service/browser before install argslist = args.split() exit_code = 0 try: subprocess.check_call(argslist) except subprocess.CalledProcessError as e: exit_code = e.returncode time.sleep(10) if _yandex_installed(): exit_code = 0 time.sleep(50) _kill_processes(["browser.exe"]) # close the "choose search engine" first-run window print 'retcode' + str(exit_code) + 'retcode' # dir: string -> directory where uninstaller exists # args: string -> all parameters, space-delimited def spm_uninstall(dir, args): os.chdir(dir) argslist = args.split() exit_code = 0 try: subprocess.check_call(argslist) except subprocess.CalledProcessError as e: exit_code = e.returncode time.sleep(5) if not _yandex_installed() and not _yandex_registry_present(): exit_code = 0 else: # leftovers - force cleanup, same pattern as BigAnt5/HardCopy _kill_processes(PROCESS_NAMES) install_dir = os.path.dirname(os.path.dirname(INSTALL_PATH)) # ...\YandexBrowser if os.path.exists(install_dir): shutil.rmtree(install_dir, ignore_errors=True) if not _yandex_installed(): exit_code = 0 print 'retcode' + str(exit_code) + 'retcode' # dir: string -> directory where installer exists # args: string -> all parameters, space-delimited def spm_update(dir, args): os.chdir(dir) _kill_processes(PROCESS_NAMES) argslist = args.split() exit_code = 0 try: subprocess.check_call(argslist) except subprocess.CalledProcessError as e: exit_code = e.returncode time.sleep(10) if _yandex_installed(): exit_code = 0 time.sleep(50) _kill_processes(["browser.exe"]) print 'retcode' + str(exit_code) + 'retcode'