# -*- coding: utf-8 -*-
from setuphelpers import *
import platform
uninstallkey = []
# Update for Removal of Adobe Flash Player for Windows (KB4577586)
"""
Sources:
https://helpx.adobe.com/flash-player/kb/uninstall-flash-player-windows.html
https://blogs.windows.com/msedgedev/2020/09/04/update-adobe-flash-end-support/
https://www.catalog.update.microsoft.com/search.aspx?q=4577586
"""
class WindowsVersions(object):
"""Helper class to get numbered windows version from windows name version
... versionadded:: 1.3.5
.. versionchanged:: 1.9
Adding Windows 10.0 and newer versions
"""
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724832(v=vs.85).aspx
# https://msdn.microsoft.com/en-us/library/windows/desktop/dn481241(v=vs.85).aspx
Windows10v20H2 = Version('10.0.19042',3)
Windows10v2009 = Version('10.0.19042',3)
Windows10v2004 = Version('10.0.19041',3)
Windows10v1909 = Version('10.0.18363',3)
Windows10v1903 = Version('10.0.18362',3)
Windows10v1809 = Version('10.0.17763',3)
Windows10v1803 = Version('10.0.17134',3)
Windows10v1709 = Version('10.0.16299',3)
Windows10v1703 = Version('10.0.15063',3)
Windows10v1607 = Version('10.0.14393',3)
Windows10v1511 = Version('10.0.10586',3)
Windows10v1507 = Version('10.0.10240',3)
Windows10 = Version('10.0',2)
WindowsServer2019 = Version('10.0.17763',3)
WindowsServer2016 = Version('10.0.14393',3)
WindowsServer2016TechnicalPreview = Version('10.0',2)
Windows81 = Version('6.3', 2)
WindowsServer2012R2 = Version('6.3', 2)
Windows8 = Version('6.2', 2)
WindowsServer2012 = Version('6.2', 2)
Windows7 = Version('6.1', 2)
WindowsServer2008R2 = Version('6.1', 2)
WindowsServer2008 = Version('6.0', 2)
WindowsVista = Version('6.0', 2)
WindowsServer2003R2 = Version('5.2', 2)
WindowsServer2003 = Version('5.2', 2)
WindowsXP64 = Version('5.2', 2)
WindowsEmbeddedStandard2009 = WindowsXP = Version('5.1', 2)
WindowsXP = Version('5.1', 2)
Windows2000 = Version('5.0', 2)
# Defining variables
kbs_dict = [
{
"dl_url" : "http://download.windowsupdate.com/c/msdownload/update/software/updt/2020/10/windows10.0-kb4577586-x64_c9bb49df325c20ddc147137b3f769fa44d800dde.msu",
"kb_name" : "windows10.0-kb4577586-x64_c9bb49df325c20ddc147137b3f769fa44d800dde.msu",
"win_vers": WindowsVersions.Windows10v20H2,
"arch" : "x64"
},
{
"dl_url" : "http://download.windowsupdate.com/d/msdownload/update/software/updt/2020/10/windows10.0-kb4577586-x86_238da6b730a3f6a709f31980b87e2d8ecb0a8973.msu",
"kb_name" : "windows10.0-kb4577586-x86_238da6b730a3f6a709f31980b87e2d8ecb0a8973.msu",
"win_vers": WindowsVersions.Windows10v20H2,
"arch" : "x86"
},
{
"dl_url" : "http://download.windowsupdate.com/d/msdownload/update/software/updt/2020/10/windows10.0-kb4577586-x86_238da6b730a3f6a709f31980b87e2d8ecb0a8973.msu",
"kb_name" : "windows10.0-kb4577586-x86_238da6b730a3f6a709f31980b87e2d8ecb0a8973.msu",
"win_vers": WindowsVersions.Windows10v2004,
"arch" : "x64"
},
{
"dl_url" : "http://download.windowsupdate.com/c/msdownload/update/software/updt/2020/10/windows10.0-kb4577586-x64_ec16e118cd8b99df185402c7a0c65a31e031a6f0.msu",
"kb_name" : "windows10.0-kb4577586-x64_ec16e118cd8b99df185402c7a0c65a31e031a6f0.msu",
"win_vers": WindowsVersions.Windows10v1909,
"arch" : "x64"
},
{
"dl_url" : "http://download.windowsupdate.com/c/msdownload/update/software/updt/2020/10/windows10.0-kb4577586-x86_002b1ffa7fb31836aeaed74007a6949d31a96460.msu",
"kb_name" : "windows10.0-kb4577586-x86_002b1ffa7fb31836aeaed74007a6949d31a96460.msu",
"win_vers": WindowsVersions.Windows10v1909,
"arch" : "x86"
},
{
"dl_url" : "http://download.windowsupdate.com/c/msdownload/update/software/updt/2020/10/windows10.0-kb4577586-x64_ec16e118cd8b99df185402c7a0c65a31e031a6f0.msu",
"kb_name" : "windows10.0-kb4577586-x64_ec16e118cd8b99df185402c7a0c65a31e031a6f0.msu",
"win_vers": WindowsVersions.Windows10v1903,
"arch" : "x64"
},
{
"dl_url" : "http://download.windowsupdate.com/c/msdownload/update/software/updt/2020/10/windows10.0-kb4577586-x86_002b1ffa7fb31836aeaed74007a6949d31a96460.msu",
"kb_name" : "windows10.0-kb4577586-x86_002b1ffa7fb31836aeaed74007a6949d31a96460.msu",
"win_vers": WindowsVersions.Windows10v1903,
"arch" : "x86"
},
{
"dl_url" : "http://download.windowsupdate.com/c/msdownload/update/software/updt/2020/10/windows10.0-kb4577586-x64_d0f434327db9e3308b86591c248c825c03687632.msu",
"kb_name" : "windows10.0-kb4577586-x64_d0f434327db9e3308b86591c248c825c03687632.msu",
"win_vers": WindowsVersions.Windows10v1809,
"arch" : "x64"
},
{
"dl_url" : "http://download.windowsupdate.com/d/msdownload/update/software/updt/2020/10/windows10.0-kb4577586-x86_947f151a8bb5a0b0797702e53431c52d56c02c32.msu",
"kb_name" : "windows10.0-kb4577586-x86_947f151a8bb5a0b0797702e53431c52d56c02c32.msu",
"win_vers": WindowsVersions.Windows10v1809,
"arch" : "x86"
},
{
"dl_url" : "http://download.windowsupdate.com/d/msdownload/update/software/updt/2020/10/windows8.1-kb4577586-x64_1c039dbdafaf12e9163e8d56cf578cc998306ecd.msu",
"kb_name" : "windows8.1-kb4577586-x64_1c039dbdafaf12e9163e8d56cf578cc998306ecd.msu",
"win_vers": WindowsVersions.Windows81,
"arch" : "x64"
},
{
"dl_url" : "http://download.windowsupdate.com/d/msdownload/update/software/updt/2020/10/windows8.1-kb4577586-x86_d81dcb42a9b91d279c0b7510669bc0d556288fd3.msu",
"kb_name" : "windows8.1-kb4577586-x86_d81dcb42a9b91d279c0b7510669bc0d556288fd3.msu",
"win_vers": WindowsVersions.Windows81,
"arch" : "x86"
}
]
bin_name_uninstaller = 'uninstall_flash_player.exe'
silent_uninst_args = '-uninstall'
app_name = 'Adobe Flash Player'
schtasks_to_delete = ['Adobe Flash Player Updater','Adobe Flash Player PPAPI Notifier']
services_to_delete = ['AdobeFlashPlayerUpdateSvc']
processes_to_kill = ['firefox.exe','iexplore.exe','opera.exe','chrome.exe']
def install():
# Initializing variables
if iswin64():
arch = "x64"
app_dir = makepath(os.environ['SYSTEMROOT'],'SysWOW64','Macromed','Flash')
app_macromed_dir = makepath(os.environ['SYSTEMROOT'],'SysWOW64','Macromed')
else:
arch = "x86"
app_dir = makepath(os.environ['SYSTEMROOT'],'System32','Macromed','Flash')
app_macromed_dir = makepath(os.environ['SYSTEMROOT'],'System32','Macromed')
bin_app_path_w10 = makepath(app_dir, 'FlashUtil_ActiveX.exe')
# Uninstalling Adobe Flash Player
if installed_softwares(name=app_name):
killalltasks(processes_to_kill)
run('"%s" %s' % (makepath(basedir, bin_name_uninstaller), silent_uninst_args))
# Deleting Scheduled Tasks
for task in schtasks_to_delete:
if task_exists(task):
try:
delete_task(task)
except:
print("Unable to delete the task: %s" % task)
# Deleting Service
for service in services_to_delete:
if service_installed(service):
try:
service_delete(service)
except:
print("Unable to delete the service: %s" % service)
# Uninstalling IE Adobe Flash Player on Windows 8+ with KB
if windows_version() >= WindowsVersions.Windows8:
for kb_dict in kbs_dict:
if kb_dict['win_vers'] == windows_version(members_count=3) and kb_dict['arch'] == arch:
kb_file = kb_dict['kb_name']
kb_nb = kb_file.split('-')[1]
break
if kb_nb:
with EnsureWUAUServRunning():
if not is_kb_installed(kb_nb):
print("Installing {}".format(kb_file))
killalltasks('iexplore.exe')
run('wusa.exe "{}" /quiet /norestart'.format(kb_file),accept_returncodes=[0,3010,2359302,-2145124329],timeout=3600)
else:
print("{} already installed".format(kb_file))
else:
print("This Windows 10 version is not handled, you have to complete this package (complete the kbs_dict)")
# Removing remaining files if acceptable
if isdir(app_dir):
for binary_w7 in glob.glob(makepath(app_dir, '*')): # FlashPlayerPlugin_32_0_0_xxx.exe
if binary_w7.startswith('FlashPlayerPlugin_') and binary_w7.endswith('.exe'):
bin_app_path_w7 = binary_w7
break
else:
bin_app_path_w7 = makepath(app_dir, 'filenotfound.exe')
if isfile(bin_app_path_w10) or isfile(bin_app_path_w7):
print("WARNING: %s seems not fully uninstalled" % app_name)
else:
remove_tree(app_macromed_dir)
else:
if isdir(app_macromed_dir):
remove_tree(app_macromed_dir)
def audit():
# Initializing variables
if iswin64():
app_dir = makepath(os.environ['SYSTEMROOT'],'SysWOW64','Macromed','Flash')
else:
app_dir = makepath(os.environ['SYSTEMROOT'],'System32','Macromed','Flash')
# Auditing the package
if installed_softwares(name=app_name):
print("ERROR: %s is still installed" % app_name)
return "ERROR"
if isdir(app_dir):
print("WARNING: The directory %s remain, Flash may not be uninstalled for IE" % app_dir)
return "WARNING"
if not installed_softwares(name=app_name):
print("OK: %s is not detected on the system" % app_name)
return "OK"
def update_package():
# Initializing variables
proxies = get_proxies()
if not proxies:
proxies = get_proxies_from_wapt_console()
version = control.version.split('-')[0]
# Downloading latest binaries
wget('https://fpdownload.macromedia.com/get/flashplayer/current/support/uninstall_flash_player.exe', bin_name_uninstaller, proxies=proxies)
# Windows KB's
for dl_kb in kbs_dict:
if not isfile(dl_kb['kb_name']):
wget(dl_kb['dl_url'], dl_kb['kb_name'], proxies=proxies)
# Changing version of the package
control.version = '%s-%s'%(version,int(control.version.split('-')[-1])+1)
control.save_control_to_wapt()
print('Changing package version to: %s in WAPT\\control' % control.version)
def get_proxies():
if platform.python_version_tuple()[0] == '3':
from urllib.request import getproxies
else:
from urllib import getproxies
return getproxies()
def get_proxies_from_wapt_console():
proxies = {}
if platform.system() == 'Windows':
waptconsole_ini_path = makepath(user_local_appdata(), 'waptconsole', 'waptconsole.ini')
else:
waptconsole_ini_path = makepath(user_home_directory(), '.config', 'waptconsole', 'waptconsole.ini')
if isfile(waptconsole_ini_path):
proxy_wapt = inifile_readstring(waptconsole_ini_path, 'global', 'http_proxy')
if proxy_wapt:
proxies = {'http': proxy_wapt, 'https': proxy_wapt}
return proxies
def is_kb_installed(hotfixid):
"""Return True or False depending if a Windows update KB is installed.
"""
installed_update = installed_windows_updates()
if [kb for kb in installed_update if kb['HotFixID'].upper() == hotfixid.upper()]:
return True
return False