Add initial winget support
This commit is contained in:
parent
55ce4d8ded
commit
9980dab27b
2 changed files with 72 additions and 1 deletions
37
scripts/install_winget.ps1
Normal file
37
scripts/install_winget.ps1
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
# WizardKit: Install winget (if needed)
|
||||||
|
|
||||||
|
#Requires -Version 3.0
|
||||||
|
if (Test-Path Env:\DEBUG) {
|
||||||
|
Set-PSDebug -Trace 1
|
||||||
|
}
|
||||||
|
$Host.UI.RawUI.WindowTitle = "WizardKit: Winget installer"
|
||||||
|
$Host.UI.RawUI.BackgroundColor = "black"
|
||||||
|
$Host.UI.RawUI.ForegroundColor = "white"
|
||||||
|
$ProgressPreference = "SilentlyContinue"
|
||||||
|
|
||||||
|
# STATIC VARIABLES
|
||||||
|
$EXIT_OK = 0
|
||||||
|
$EXIT_INSTALLED = 1
|
||||||
|
$EXIT_FAILED_TO_INSTALL = 2
|
||||||
|
|
||||||
|
# Main
|
||||||
|
$NeedsInstalled = $false
|
||||||
|
try {
|
||||||
|
$_ = $(winget --version)
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
$NeedsInstalled = $true
|
||||||
|
}
|
||||||
|
|
||||||
|
# Install
|
||||||
|
if (! $NeedsInstalled) {
|
||||||
|
exit $EXIT_INSTALLED
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Add-AppxPackage -ErrorAction Stop -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
exit $EXIT_FAILED_TO_INSTALL
|
||||||
|
}
|
||||||
|
|
||||||
|
exit $EXIT_OK
|
||||||
|
|
@ -26,7 +26,7 @@ from wk.cfg.windows_builds import (
|
||||||
OUTDATED_BUILD_NUMBERS,
|
OUTDATED_BUILD_NUMBERS,
|
||||||
WINDOWS_BUILDS,
|
WINDOWS_BUILDS,
|
||||||
)
|
)
|
||||||
from wk.exe import get_json_from_command, run_program
|
from wk.exe import get_json_from_command, run_program, wait_for_procs
|
||||||
from wk.kit.tools import find_kit_dir
|
from wk.kit.tools import find_kit_dir
|
||||||
from wk.std import (
|
from wk.std import (
|
||||||
GenericError,
|
GenericError,
|
||||||
|
|
@ -744,5 +744,39 @@ def stop_service(service_name) -> None:
|
||||||
raise GenericError(f'Failed to stop service {service_name}')
|
raise GenericError(f'Failed to stop service {service_name}')
|
||||||
|
|
||||||
|
|
||||||
|
# Winget Functions
|
||||||
|
def winget_check(raise_exceptions: bool = False) -> None:
|
||||||
|
"""Check if winget is present, install if not."""
|
||||||
|
cmd = [
|
||||||
|
'powershell',
|
||||||
|
'-ExecutionPolicy', 'bypass',
|
||||||
|
'-File', find_kit_dir('Scripts').joinpath('install_winget.ps1'),
|
||||||
|
]
|
||||||
|
proc = run_program(cmd, check=False)
|
||||||
|
|
||||||
|
# Raise exception if requested
|
||||||
|
if raise_exceptions:
|
||||||
|
if proc.returncode == 1:
|
||||||
|
raise GenericWarning('Already installed')
|
||||||
|
if proc.returncode == 2:
|
||||||
|
raise GenericError('Failed to install')
|
||||||
|
|
||||||
|
|
||||||
|
def winget_upgrade() -> None:
|
||||||
|
"""Upgrade all supported programs with winget, returns subprocess.Popen."""
|
||||||
|
cmd = ['winget', 'upgrade', '--all']
|
||||||
|
|
||||||
|
# Adjust if running inside ConEmu
|
||||||
|
tmp_file = fr'{os.environ.get("TMP")}\run_winget.cmd'
|
||||||
|
if CONEMU:
|
||||||
|
with open(tmp_file, 'w', encoding='utf-8') as _f:
|
||||||
|
_f.write('@echo off\n')
|
||||||
|
_f.write(" ".join(cmd))
|
||||||
|
cmd = ('cmd', '/c', tmp_file, '-new_console:n', '-new_console:s33V')
|
||||||
|
run_program(cmd, check=False, pipe=False)
|
||||||
|
sleep(1)
|
||||||
|
wait_for_procs('winget.exe')
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print("This file is not meant to be called directly.")
|
print("This file is not meant to be called directly.")
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue