|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from setuphelpers import *
|
|
|
|
import re
|
|
|
|
|
|
|
|
uninstallkey = []
|
|
|
|
|
|
|
|
# re: regular match for soft name
|
|
|
|
# key: exact match for uninstallkey
|
|
|
|
# run: provide direct command for uninstall
|
|
|
|
# metro: remove a metro app with powershell
|
|
|
|
# str or list : keywords in key and/or name
|
|
|
|
|
|
|
|
# tuple : (search,process_to_kill,title)
|
|
|
|
|
|
|
|
# look to http://www.shouldiremoveit.com/oems-bloatware.aspx for information about bloatwares
|
|
|
|
|
|
|
|
crapwares = [
|
|
|
|
're:ask toolbar',
|
|
|
|
('key:{7DB9F1E5-9ACB-410D-A7DC-7A3D023CE045}','welcome.exe','Dell Getting Started Guide'),
|
|
|
|
'metro:Microsoft.XboxGameCallableUI',
|
|
|
|
'metro:Microsoft.MSPaint',
|
|
|
|
'metro:Microsoft.SkypeApp',
|
|
|
|
'metro:Microsoft.XboxGameOverlay',
|
|
|
|
'metro:Microsoft.Whiteboard',
|
|
|
|
'metro:Microsoft.Microsoft3DViewer',
|
|
|
|
'metro:Microsoft.XboxIdentityProvider',
|
|
|
|
'metro:Microsoft.Xbox.TCUI',
|
|
|
|
'metro:Microsoft.MicrosoftStickyNotes',
|
|
|
|
'metro:Microsoft.ZuneMusic',
|
|
|
|
'metro:Microsoft.ZuneVideo',
|
|
|
|
'metro:Microsoft.WindowsMaps',
|
|
|
|
'metro:Microsoft.WindowsMaps',
|
|
|
|
'metro:Microsoft.BingWeather',
|
|
|
|
'metro:Microsoft.MicrosoftSolitaireCollection',
|
|
|
|
'metro:Microsoft.OneConnect',
|
|
|
|
'metro:Microsoft.WindowsFeedbackHub',
|
|
|
|
'metro:Microsoft.XboxApp',
|
|
|
|
'metro:Microsoft.XboxSpeechToTextOverlay',
|
|
|
|
'metro:Microsoft.Windows.ParentalControls',
|
|
|
|
'metro:Microsoft.Windows.Cortana'
|
|
|
|
]
|
|
|
|
|
|
|
|
def find_soft_re(softs,pattern):
|
|
|
|
return [s for s in softs if pattern.findall(s['name'])]
|
|
|
|
|
|
|
|
def find_soft_keywords(softs,keywords):
|
|
|
|
def check_words(target,words):
|
|
|
|
mywords = target.lower()
|
|
|
|
result = not words or mywords
|
|
|
|
for w in words:
|
|
|
|
result = result and w in mywords
|
|
|
|
return result
|
|
|
|
|
|
|
|
return [s for s in softs if check_words(s['key'] + ' '+ s['name'],keywords)]
|
|
|
|
|
|
|
|
def install():
|
|
|
|
|
|
|
|
all_softs = installed_softwares()
|
|
|
|
|
|
|
|
for crapware in crapwares:
|
|
|
|
# split if processes to kill is supplied too
|
|
|
|
if isinstance(crapware,tuple):
|
|
|
|
if len(crapware) == 3:
|
|
|
|
(crapware,to_kill,title) = crapware
|
|
|
|
elif len(crapware) == 2:
|
|
|
|
(crapware,to_kill) = crapware
|
|
|
|
title = crapware
|
|
|
|
else:
|
|
|
|
to_kill = None
|
|
|
|
title = crapware
|
|
|
|
|
|
|
|
run = None
|
|
|
|
|
|
|
|
if isinstance(crapware,(unicode,str)) and crapware.startswith('metro:') and windows_version() > Version('10'):
|
|
|
|
print('Processing removal of %s '% title)
|
|
|
|
remove_metroapp(crapware[6:])
|
|
|
|
elif isinstance(crapware,re._pattern_type):
|
|
|
|
uninstall_entries = find_soft_re(all_softs,crapware)
|
|
|
|
elif isinstance(crapware,(unicode,str)) and crapware.startswith('re:'):
|
|
|
|
uninstall_entries = find_soft_re(all_softs,re.compile(crapware[3:],re.IGNORECASE))
|
|
|
|
elif isinstance(crapware,(unicode,str)) and crapware.startswith('key:'):
|
|
|
|
uninstall_entries = [s for s in all_softs if s['key'] == crapware[4:]]
|
|
|
|
elif isinstance(crapware,(unicode,str)) and crapware.startswith('run:'):
|
|
|
|
uninstall_entries = []
|
|
|
|
run = crapware[4:]
|
|
|
|
# check if command exists
|
|
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
if isinstance(crapware,(str,unicode)):
|
|
|
|
mykeywords = crapware.lower().split()
|
|
|
|
else:
|
|
|
|
mykeywords = [ ensure_unicode(k).lower() for k in crapware ]
|
|
|
|
uninstall_entries = find_soft_keywords(all_softs,mykeywords)
|
|
|
|
|
|
|
|
if uninstall_entries or run:
|
|
|
|
print('Processing removal of %s '%(title,))
|
|
|
|
if to_kill:
|
|
|
|
print(' Killing processes %s' % (to_kill,))
|
|
|
|
killalltasks(to_kill)
|
|
|
|
|
|
|
|
for uninstall in uninstall_entries:
|
|
|
|
cmd = WAPT.uninstall_cmd(uninstall['key'])
|
|
|
|
print(u' Uninstalling %s' % (uninstall['name'],))
|
|
|
|
run_notfatal(cmd)
|
|
|
|
|
|
|
|
if run:
|
|
|
|
print(u' Launching %s' % (run,))
|
|
|
|
run_notfatal(run)
|
|
|
|
|