diff --git a/.bin/Scripts/activate.py b/.bin/Scripts/activate.py index 5d17ae2f..3555c46a 100644 --- a/.bin/Scripts/activate.py +++ b/.bin/Scripts/activate.py @@ -29,7 +29,7 @@ if __name__ == '__main__': activation_methods = [ {'Name': 'Activate with BIOS key', 'Function': activate_with_bios}, ] - if global_vars['OS']['Version'] not in ['8', '10']: + if global_vars['OS']['Version'] not in ('8', '8.1', '10'): activation_methods[0]['Disabled'] = True actions = [ {'Name': 'Quit', 'Letter': 'Q'}, diff --git a/.bin/Scripts/dism.py b/.bin/Scripts/dism.py index 4ae2084d..1c88e51b 100644 --- a/.bin/Scripts/dism.py +++ b/.bin/Scripts/dism.py @@ -23,7 +23,7 @@ if __name__ == '__main__': 'GenericRepair': 'Repaired', 'UnsupportedOSError': 'Unsupported OS', }} - disabled = bool(global_vars['OS']['Version'] not in ['8', '10']) + disabled = bool(global_vars['OS']['Version'] not in ('8', '8.1', '10')) options = [ {'Name': 'Check Health', 'Repair': False, 'Disabled': disabled}, {'Name': 'Restore Health', 'Repair': True, 'Disabled': disabled}] diff --git a/.bin/Scripts/functions/common.py b/.bin/Scripts/functions/common.py index 80e064d9..ef918f0f 100644 --- a/.bin/Scripts/functions/common.py +++ b/.bin/Scripts/functions/common.py @@ -18,6 +18,7 @@ from subprocess import CalledProcessError from settings.main import * from settings.tools import * +from settings.windows_builds import * # Global variables global_vars = {} @@ -615,93 +616,42 @@ def check_os(): # Query registry path = r'SOFTWARE\Microsoft\Windows NT\CurrentVersion' with winreg.OpenKey(HKLM, path) as key: - for name in ['CurrentBuild', 'CurrentVersion', 'ProductName']: + for name in ['CurrentBuild', 'ProductName']: try: tmp[name] = winreg.QueryValueEx(key, name)[0] except FileNotFoundError: tmp[name] = 'Unknown' - try: - tmp['CurrentBuild'] = int(tmp['CurrentBuild']) - except ValueError: - # This should be interesting... - tmp['CurrentBuild'] = -1 - try: - tmp['CurrentVersion'] = float(tmp['CurrentVersion']) - except ValueError: - # This should also be interesting... - tmp['CurrentVersion'] = -1 # Check bit depth tmp['Arch'] = 32 if 'PROGRAMFILES(X86)' in global_vars['Env']: tmp['Arch'] = 64 + # Get Windows build info + build_info = WINDOWS_BUILDS.get( + tmp['CurrentBuild'], + ('Unknown', 'Build {}'.format(tmp['CurrentBuild']), None, None, 'unrecognized')) + tmp['Version'] = build_info.pop(0) + tmp['Release'] = build_info.pop(0) + tmp['Codename'] = build_info.pop(0) + tmp['Marketing Name'] = build_info.pop(0) + tmp['Notes'] = build_info.pop(0) + # Set name tmp['Name'] = tmp['ProductName'] - if tmp['CurrentBuild'] == 7601: - tmp['Name'] += ' SP1' # Win 7 - if tmp['CurrentBuild'] == 9600: - tmp['Name'] += ' Update' # Win 8.1u - if tmp['CurrentBuild'] == 10240: - tmp['Name'] += ' Release 1507 "Threshold 1"' - if tmp['CurrentBuild'] == 10586: - tmp['Name'] += ' Release 1511 "Threshold 2"' - if tmp['CurrentBuild'] == 14393: - tmp['Name'] += ' Release 1607 "Redstone 1" / "Anniversary Update"' - if tmp['CurrentBuild'] == 15063: - tmp['Name'] += ' Release 1703 "Redstone 2" / "Creators Update"' - if tmp['CurrentBuild'] == 16299: - tmp['Name'] += ' Release 1709 "Redstone 3" / "Fall Creators Update"' + if tmp['Release']: + tmp['Name'] += ' {}'.format(tmp['Release']) + if tmp['Codename']: + tmp['Name'] += ' "{}"'.format(tmp['Codename']) + if tmp['Marketing Name']: + tmp['Name'] += ' / "{}"'.format(tmp['Marketing Name']) tmp['Name'] = re.sub(r'\s+', ' ', tmp['Name']) - + # Set display name tmp['DisplayName'] = '{} x{}'.format(tmp['Name'], tmp['Arch']) - if tmp['CurrentBuild'] in [7600, 9200, 10240, 10586]: - tmp['DisplayName'] += ' (very outdated)' - elif tmp['CurrentBuild'] in [7601, 9600, 14393, 15063]: - tmp['DisplayName'] += ' (outdated)' - elif tmp['CurrentBuild'] == 16299: - pass # Current Win10 release - else: - tmp['DisplayName'] += ' (unrecognized)' - - # Set version - if tmp['CurrentVersion'] == 6.0: - tmp['Version'] = 'Vista' - elif tmp['CurrentVersion'] == 6.1: - tmp['Version'] = '7' - elif 6.2 <= tmp['CurrentVersion'] <= 6.3: - if tmp['CurrentBuild'] <= 9600: - tmp['Version'] = '8' - elif tmp['CurrentBuild'] >= 10240: - tmp['Version'] = '10' - else: - tmp['Version'] = 'Unknown' + if tmp['Notes']: + tmp['Name'] += ' ({})'.format(tmp['Notes']) - # == vista == - # 6.0.6000 - # 6.0.6001 # SP1 - # 6.0.6002 # SP2 - # ==== 7 ==== - # 6.1.7600 - # 6.1.7601 # SP1 - # 6.1.7602 # Umm.. where'd this come from? - # ==== 8 ==== - # 6.2.9200 - # === 8.1 === - # 6.3.9200 - # === 8.1u == - # 6.3.9600 - # === 10 v1507 "Threshold 1" == - # 6.3.10240 - # === 10 v1511 "Threshold 2" == - # 6.3.10586 - # === 10 v1607 "Redstone 1" "Anniversary Update" == - # 6.3.14393 - # === 10 v1703 "Redstone 2" "Creators Update" == - # 6.3.15063 - # === 10 v1709 "Redstone 3" "Fall Creators Update" == - # 6.3.16299 global_vars['OS'] = tmp def check_tools(): diff --git a/.bin/Scripts/functions/info.py b/.bin/Scripts/functions/info.py index fa3ceab6..fbde1a27 100644 --- a/.bin/Scripts/functions/info.py +++ b/.bin/Scripts/functions/info.py @@ -419,7 +419,7 @@ def show_os_name(): # Show all 32-bit installs as an error message print_error(os_name, timestamp=False) else: - if re.search(r'(unrecognized|very outdated)', os_name, re.IGNORECASE): + if re.search(r'(preview build|unrecognized|unsupported)', os_name, re.IGNORECASE): print_error(os_name, timestamp=False) elif re.search(r'outdated', os_name, re.IGNORECASE): print_warning(os_name, timestamp=False) diff --git a/.bin/Scripts/functions/repairs.py b/.bin/Scripts/functions/repairs.py index bf9c3cdd..e4d5e74f 100644 --- a/.bin/Scripts/functions/repairs.py +++ b/.bin/Scripts/functions/repairs.py @@ -11,7 +11,7 @@ def run_chkdsk(repair=False): def run_chkdsk_scan(): """Run CHKDSK in a "split window" and report errors.""" - if global_vars['OS']['Version'] in ['8', '10']: + if global_vars['OS']['Version'] in ('8', '8.1', '10'): cmd = ['chkdsk', global_vars['Env']['SYSTEMDRIVE'], '/scan', '/perf'] else: cmd = ['chkdsk', global_vars['Env']['SYSTEMDRIVE']] @@ -44,7 +44,7 @@ def run_chkdsk_offline(): def run_dism(repair=False): """Run DISM /RestoreHealth, then /CheckHealth, and then report errors.""" - if global_vars['OS']['Version'] in ['8', '10']: + if global_vars['OS']['Version'] in ('8', '8.1', '10'): if repair: # Restore Health cmd = [ diff --git a/.bin/Scripts/functions/setup.py b/.bin/Scripts/functions/setup.py index bd40f9e5..c6b681a8 100644 --- a/.bin/Scripts/functions/setup.py +++ b/.bin/Scripts/functions/setup.py @@ -220,7 +220,7 @@ def install_chrome_extensions(): def install_classicstart_skin(): """Extract ClassicStart skin to installation folder.""" - if global_vars['OS']['Version'] not in ['8', '10']: + if global_vars['OS']['Version'] not in ('8', '8.1', '10'): raise UnsupportedOSError extract_item('ClassicStartSkin', silent=True) source = r'{BinDir}\ClassicStartSkin\Metro-Win10-Black.skin7'.format( @@ -245,7 +245,7 @@ def install_firefox_extensions(): def install_ninite_bundle(mse=False): """Run Ninite file(s) based on OS version.""" - if global_vars['OS']['Version'] in ['8', '10']: + if global_vars['OS']['Version'] in ('8', '8.1', '10'): # Modern selection popen_program(r'{BaseDir}\Installers\Extras\Bundles\Modern.exe'.format( **global_vars)) diff --git a/.bin/Scripts/settings/windows_builds.py b/.bin/Scripts/settings/windows_builds.py new file mode 100644 index 00000000..4be67d98 --- /dev/null +++ b/.bin/Scripts/settings/windows_builds.py @@ -0,0 +1,153 @@ +# Wizard Kit: Settings - Windows Builds + +WINDOWS_BUILDS = { +# Build Version Release Codename Marketing Name Notes + '6000': ( 'Vista', 'RTM', 'Longhorn', None, 'unsupported'), + '6000': ( 'Vista', 'RTM', 'Longhorn', None, 'unsupported'), + '6001': ( 'Vista', 'SP1', 'Longhorn', None, 'unsupported'), + '6002': ( 'Vista', 'SP2', 'Longhorn', None, 'unsupported'), + + '7600': ( '7', 'RTM', 'Vienna', None, 'unsupported'), + '7601': ( '7', 'SP1', 'Vienna', None, 'outdated'), + + '9200': ( '8', 'RTM', None, None, 'unsupported'), + '9200': ( '8.1', None, 'Blue', None, 'outdated'), + '9600': ( '8.1', None, 'Update', None, None), + + '9841': ( '10', None, 'Threshold 1', None, 'preview build'), + '9860': ( '10', None, 'Threshold 1', None, 'preview build'), + '9879': ( '10', None, 'Threshold 1', None, 'preview build'), + '9926': ( '10', None, 'Threshold 1', None, 'preview build'), + '10041': ( '10', None, 'Threshold 1', None, 'preview build'), + '10049': ( '10', None, 'Threshold 1', None, 'preview build'), + '10061': ( '10', None, 'Threshold 1', None, 'preview build'), + '10074': ( '10', None, 'Threshold 1', None, 'preview build'), + '10122': ( '10', None, 'Threshold 1', None, 'preview build'), + '10130': ( '10', None, 'Threshold 1', None, 'preview build'), + '10158': ( '10', None, 'Threshold 1', None, 'preview build'), + '10159': ( '10', None, 'Threshold 1', None, 'preview build'), + '10162': ( '10', None, 'Threshold 1', None, 'preview build'), + '10166': ( '10', None, 'Threshold 1', None, 'preview build'), + '10240': ( '10', 'v1507', 'Threshold 1', None, 'unsupported'), + '10525': ( '10', None, 'Threshold 2', None, 'preview build'), + '10532': ( '10', None, 'Threshold 2', None, 'preview build'), + '10547': ( '10', None, 'Threshold 2', None, 'preview build'), + '10565': ( '10', None, 'Threshold 2', None, 'preview build'), + '10576': ( '10', None, 'Threshold 2', None, 'preview build'), + '10586': ( '10', 'v1511', 'Threshold 2', 'November Update', 'unsupported'), + '11082': ( '10', None, 'Redstone 1', None, 'preview build'), + '11099': ( '10', None, 'Redstone 1', None, 'preview build'), + '11102': ( '10', None, 'Redstone 1', None, 'preview build'), + '14251': ( '10', None, 'Redstone 1', None, 'preview build'), + '14257': ( '10', None, 'Redstone 1', None, 'preview build'), + '14271': ( '10', None, 'Redstone 1', None, 'preview build'), + '14279': ( '10', None, 'Redstone 1', None, 'preview build'), + '14291': ( '10', None, 'Redstone 1', None, 'preview build'), + '14295': ( '10', None, 'Redstone 1', None, 'preview build'), + '14316': ( '10', None, 'Redstone 1', None, 'preview build'), + '14328': ( '10', None, 'Redstone 1', None, 'preview build'), + '14332': ( '10', None, 'Redstone 1', None, 'preview build'), + '14342': ( '10', None, 'Redstone 1', None, 'preview build'), + '14352': ( '10', None, 'Redstone 1', None, 'preview build'), + '14361': ( '10', None, 'Redstone 1', None, 'preview build'), + '14366': ( '10', None, 'Redstone 1', None, 'preview build'), + '14367': ( '10', None, 'Redstone 1', None, 'preview build'), + '14371': ( '10', None, 'Redstone 1', None, 'preview build'), + '14372': ( '10', None, 'Redstone 1', None, 'preview build'), + '14376': ( '10', None, 'Redstone 1', None, 'preview build'), + '14379': ( '10', None, 'Redstone 1', None, 'preview build'), + '14383': ( '10', None, 'Redstone 1', None, 'preview build'), + '14385': ( '10', None, 'Redstone 1', None, 'preview build'), + '14388': ( '10', None, 'Redstone 1', None, 'preview build'), + '14390': ( '10', None, 'Redstone 1', None, 'preview build'), + '14393': ( '10', 'v1607', 'Redstone 1', 'Anniversary Update', 'unsupported'), + '14901': ( '10', None, 'Redstone 2', None, 'preview build'), + '14905': ( '10', None, 'Redstone 2', None, 'preview build'), + '14915': ( '10', None, 'Redstone 2', None, 'preview build'), + '14926': ( '10', None, 'Redstone 2', None, 'preview build'), + '14931': ( '10', None, 'Redstone 2', None, 'preview build'), + '14936': ( '10', None, 'Redstone 2', None, 'preview build'), + '14942': ( '10', None, 'Redstone 2', None, 'preview build'), + '14946': ( '10', None, 'Redstone 2', None, 'preview build'), + '14951': ( '10', None, 'Redstone 2', None, 'preview build'), + '14955': ( '10', None, 'Redstone 2', None, 'preview build'), + '14959': ( '10', None, 'Redstone 2', None, 'preview build'), + '14965': ( '10', None, 'Redstone 2', None, 'preview build'), + '14971': ( '10', None, 'Redstone 2', None, 'preview build'), + '14986': ( '10', None, 'Redstone 2', None, 'preview build'), + '15002': ( '10', None, 'Redstone 2', None, 'preview build'), + '15007': ( '10', None, 'Redstone 2', None, 'preview build'), + '15014': ( '10', None, 'Redstone 2', None, 'preview build'), + '15019': ( '10', None, 'Redstone 2', None, 'preview build'), + '15025': ( '10', None, 'Redstone 2', None, 'preview build'), + '15031': ( '10', None, 'Redstone 2', None, 'preview build'), + '15042': ( '10', None, 'Redstone 2', None, 'preview build'), + '15046': ( '10', None, 'Redstone 2', None, 'preview build'), + '15048': ( '10', None, 'Redstone 2', None, 'preview build'), + '15055': ( '10', None, 'Redstone 2', None, 'preview build'), + '15058': ( '10', None, 'Redstone 2', None, 'preview build'), + '15060': ( '10', None, 'Redstone 2', None, 'preview build'), + '15061': ( '10', None, 'Redstone 2', None, 'preview build'), + '15063': ( '10', 'v1703', 'Redstone 2', 'Creators Update', 'outdated'), + '16170': ( '10', None, 'Redstone 3', None, 'preview build'), + '16176': ( '10', None, 'Redstone 3', None, 'preview build'), + '16179': ( '10', None, 'Redstone 3', None, 'preview build'), + '16184': ( '10', None, 'Redstone 3', None, 'preview build'), + '16188': ( '10', None, 'Redstone 3', None, 'preview build'), + '16193': ( '10', None, 'Redstone 3', None, 'preview build'), + '16199': ( '10', None, 'Redstone 3', None, 'preview build'), + '16212': ( '10', None, 'Redstone 3', None, 'preview build'), + '16215': ( '10', None, 'Redstone 3', None, 'preview build'), + '16226': ( '10', None, 'Redstone 3', None, 'preview build'), + '16232': ( '10', None, 'Redstone 3', None, 'preview build'), + '16237': ( '10', None, 'Redstone 3', None, 'preview build'), + '16241': ( '10', None, 'Redstone 3', None, 'preview build'), + '16251': ( '10', None, 'Redstone 3', None, 'preview build'), + '16257': ( '10', None, 'Redstone 3', None, 'preview build'), + '16273': ( '10', None, 'Redstone 3', None, 'preview build'), + '16275': ( '10', None, 'Redstone 3', None, 'preview build'), + '16278': ( '10', None, 'Redstone 3', None, 'preview build'), + '16281': ( '10', None, 'Redstone 3', None, 'preview build'), + '16288': ( '10', None, 'Redstone 3', None, 'preview build'), + '16291': ( '10', None, 'Redstone 3', None, 'preview build'), + '16294': ( '10', None, 'Redstone 3', None, 'preview build'), + '16296': ( '10', None, 'Redstone 3', None, 'preview build'), + '16299': ( '10', 'v1709', 'Redstone 3', 'Fall Creators Update', 'outdated'), + '16353': ( '10', None, 'Redstone 4', None, 'preview build'), + '16362': ( '10', None, 'Redstone 4', None, 'preview build'), + '17004': ( '10', None, 'Redstone 4', None, 'preview build'), + '17017': ( '10', None, 'Redstone 4', None, 'preview build'), + '17025': ( '10', None, 'Redstone 4', None, 'preview build'), + '17035': ( '10', None, 'Redstone 4', None, 'preview build'), + '17040': ( '10', None, 'Redstone 4', None, 'preview build'), + '17046': ( '10', None, 'Redstone 4', None, 'preview build'), + '17063': ( '10', None, 'Redstone 4', None, 'preview build'), + '17074': ( '10', None, 'Redstone 4', None, 'preview build'), + '17083': ( '10', None, 'Redstone 4', None, 'preview build'), + '17093': ( '10', None, 'Redstone 4', None, 'preview build'), + '17101': ( '10', None, 'Redstone 4', None, 'preview build'), + '17107': ( '10', None, 'Redstone 4', None, 'preview build'), + '17110': ( '10', None, 'Redstone 4', None, 'preview build'), + '17112': ( '10', None, 'Redstone 4', None, 'preview build'), + '17115': ( '10', None, 'Redstone 4', None, 'preview build'), + '17120': ( '10', None, 'Redstone 4', None, 'preview build'), + '17123': ( '10', None, 'Redstone 4', None, 'preview build'), + '17127': ( '10', None, 'Redstone 4', None, 'preview build'), + '17128': ( '10', None, 'Redstone 4', None, 'preview build'), + '17133': ( '10', None, 'Redstone 4', None, 'preview build'), + '17134': ( '10', 'v1803', 'Redstone 4', 'April 2018 Update', None), + '17604': ( '10', None, 'Redstone 5', None, 'preview build'), + '17618': ( '10', None, 'Redstone 5', None, 'preview build'), + '17623': ( '10', None, 'Redstone 5', None, 'preview build'), + '17627': ( '10', None, 'Redstone 5', None, 'preview build'), + '17634': ( '10', None, 'Redstone 5', None, 'preview build'), + '17639': ( '10', None, 'Redstone 5', None, 'preview build'), + '17643': ( '10', None, 'Redstone 5', None, 'preview build'), + '17650': ( '10', None, 'Redstone 5', None, 'preview build'), + '17655': ( '10', None, 'Redstone 5', None, 'preview build'), + '17661': ( '10', None, 'Redstone 5', None, 'preview build'), + '17666': ( '10', None, 'Redstone 5', None, 'preview build'), +} + +if __name__ == '__main__': + print("This file is not meant to be called directly.") diff --git a/.bin/Scripts/system_checklist.py b/.bin/Scripts/system_checklist.py index 9de65c8a..7de2e52a 100644 --- a/.bin/Scripts/system_checklist.py +++ b/.bin/Scripts/system_checklist.py @@ -70,7 +70,7 @@ if __name__ == '__main__': try_and_print(message='Activation:', function=show_os_activation, ns='Unknown', silent_function=False) if (not windows_is_activated() - and global_vars['OS']['Version'] in ('8', '10')): + and global_vars['OS']['Version'] in ('8', '8.1', '10')): try_and_print(message='BIOS Activation:', function=activate_with_bios, other_results=other_results)