Add show_os_name() with support status checks

This commit is contained in:
2Shirt 2021-09-28 23:23:05 -06:00
parent d725837f9b
commit 423cd343fb
Signed by: 2Shirt
GPG key ID: 152FAC923B0E132C
6 changed files with 82 additions and 8 deletions

View file

@ -135,10 +135,9 @@ BASE_MENUS = {
'System Information': (
MenuEntry('AIDA64 Report', 'auto_export_aida64_report'),
MenuEntry('Backup Registry', 'auto_backup_registry'),
MenuEntry('Everything (File List)', no_op),
),
'System Summary': (
MenuEntry('Operating System', no_op),
MenuEntry('Operating System', 'auto_show_os_name'),
MenuEntry('Windows Activation', no_op),
MenuEntry('Secure Boot', no_op),
MenuEntry('Installed RAM', no_op),

View file

@ -7,3 +7,4 @@ from . import main
from . import net
from . import sources
from . import ufd
from . import windows_builds

View file

@ -0,0 +1,36 @@
"""WizardKit: Config - Windows Builds"""
# vim: sts=2 sw=2 ts=2
OLDEST_SUPPORTED_BUILD = 19041 # Windows 10 20H1
OUTDATED_BUILD_NUMBERS = (
9600, # Windows 8.1 Update
18363, # Windows 10 19H2
)
WINDOWS_BUILDS = {
# Windows 7
'6.1.7600': 'RTM "Vienna"',
'6.1.7601': 'SP1 "Vienna"',
# Windows 8
'6.2.9200': 'RTM',
# Widnows 8.1
'6.3.9200': '"Blue"',
'6.3.9600': '"Update"',
# Windows 10
'10.0.10240': '1507 "Threshold 1"',
'10.0.10586': '1511 "Threshold 2"',
'10.0.14393': '1607 "Redstone 1"',
'10.0.15063': '1703 "Redstone 2"',
'10.0.16299': '1709 "Redstone 3"',
'10.0.17134': '1803 "Redstone 4"',
'10.0.17763': '1809 "Redstone 5"',
'10.0.18362': '1903 / 19H1',
'10.0.18363': '1909 / 19H2',
'10.0.19041': '2004 / 20H1',
'10.0.19042': '20H2',
'10.0.19043': '21H1',
'10.0.19044': '21H2',
}

View file

@ -16,12 +16,18 @@ except ImportError as err:
raise err
from wk.borrowed import acpi
from wk.cfg.windows_builds import (
OLDEST_SUPPORTED_BUILD,
OUTDATED_BUILD_NUMBERS,
WINDOWS_BUILDS,
)
from wk.exe import run_program
from wk.std import GenericError, GenericWarning, sleep
# STATIC VARIABLES
LOG = logging.getLogger(__name__)
ARCH = '64' if platform.architecture()[0] == '64bit' else '32'
CONEMU = 'ConEmuPID' in os.environ
KNOWN_DATA_TYPES = {
'BINARY': winreg.REG_BINARY,
@ -120,6 +126,33 @@ def is_activated():
return act_str and 'permanent' in act_str
# System Info Functions
def show_os_name(check=True):
"""Build OS display name and print it to screen.
NOTE: If check=True then an exception is raised if the OS version is
outdated or unsupported.
"""
key = r'SOFTWARE\Microsoft\Windows NT\CurrentVersion'
build_version = int(reg_read_value("HKLM", key, "CurrentBuild"))
build_version_full = platform.win32_ver()[1]
details = WINDOWS_BUILDS.get(build_version_full, f'Build {build_version}')
display_name = (
f'{reg_read_value("HKLM", key, "ProductName")} {ARCH}-bit {details}'
)
# Check for support issues
if check:
if build_version in OUTDATED_BUILD_NUMBERS:
raise GenericWarning(f'{display_name} (outdated)')
if build_version < OLDEST_SUPPORTED_BUILD:
raise GenericError(f'{display_name} (unsupported)')
# Done
print(display_name)
# Registry Functions
def reg_delete_key(hive, key, recurse=False):
# pylint: disable=raise-missing-from

View file

@ -52,6 +52,7 @@ from wk.std import (
)
if platform.system() == 'Windows':
from wk.os.win import (
OS_VERSION,
get_timezone,
set_timezone,
reg_delete_value,
@ -64,6 +65,7 @@ if platform.system() == 'Windows':
)
else:
# Workaround to allow basic testing under non-Windows environments
OS_VERSION = -1
def no_op(*args, **kwargs): # pylint: disable=unused-argument
"""No-op function."""
# wk.os.win
@ -133,9 +135,6 @@ PROGRAMFILES_32 = os.environ.get(
'PROGRAMFILES', r'C:\Program Files (x86)',
),
)
OS_VERSION = -1
if platform.system() == 'Windows':
OS_VERSION = float(platform.win32_ver()[0])
POWER_PLANS = {
'Balanced': '381b4222-f694-41f0-9685-ff5bb260df2e',
'Custom': '01189998-8199-9119-725c-ccccccccccc3',

View file

@ -42,10 +42,12 @@ from wk.std import (
)
if platform.system() == 'Windows':
from wk.os.win import (
OS_VERSION,
activate_with_bios,
reg_read_value,
reg_set_value,
reg_write_settings,
show_os_name,
)
from wk.repairs.win import (
backup_all_browser_profiles,
@ -59,6 +61,7 @@ if platform.system() == 'Windows':
)
else:
# Workaround to allow basic testing under non-Windows environments
OS_VERSION = -1
def no_op(*args, **kwargs): # pylint: disable=unused-argument
"""No-op function."""
# wk.os.win
@ -66,6 +69,7 @@ else:
reg_read_value = no_op
reg_set_value = no_op
reg_write_settings = no_op
show_os_name = no_op
# wk.repairs.win
backup_all_browser_profiles = no_op
backup_registry = no_op
@ -97,9 +101,6 @@ LIBREOFFICE_XCU_DATA = '''<?xml version="1.0" encoding="UTF-8"?>
</oor:items>
'''
MENU_PRESETS = Menu()
OS_VERSION = -1
if platform.system() == 'Windows':
OS_VERSION = float(platform.win32_ver()[0])
PROGRAMFILES_32 = os.environ.get(
'PROGRAMFILES(X86)', os.environ.get(
'PROGRAMFILES', r'C:\Program Files (x86)',
@ -558,6 +559,11 @@ def auto_restore_default_uac():
TRY_PRINT.run('User Account Control...', restore_default_uac)
def auto_show_os_name():
"""Display OS Name."""
TRY_PRINT.run('Operating System...', show_os_name)
def auto_windows_temp_fix():
"""Restore default ACLs for Windows\\Temp."""
TRY_PRINT.run(r'Windows\Temp fix...', fix_windows_temp)