From e1ef2e4bc5385b8bc8f60b3e7faeb044c9472d0c Mon Sep 17 00:00:00 2001 From: Nils <52573120+niStee@users.noreply.github.com> Date: Sat, 27 Jan 2024 23:51:56 +0100 Subject: [PATCH] Implementing a check for Windows 11 and, if detected, skipping Windows Update via usoclient.exe. It is suggested to install PSWindowsUpdate. --- Cargo.lock | 12 ++++++++++++ Cargo.toml | 1 + src/steps/os/windows.rs | 10 ++++++++++ 3 files changed, 23 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index c7fd4dfb..f902ae47 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1490,6 +1490,17 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "os_info" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e" +dependencies = [ + "log", + "serde", + "winapi", +] + [[package]] name = "overload" version = "0.1.1" @@ -2405,6 +2416,7 @@ dependencies = [ "nix 0.27.1", "notify-rust", "once_cell", + "os_info", "parselnk", "regex", "regex-split", diff --git a/Cargo.toml b/Cargo.toml index bdcbcf9f..33887a7f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -51,6 +51,7 @@ merge = "~0.1" regex-split = "~0.1" notify-rust = "~4.10" wildmatch = "2.3.0" +os_info = "3.7.0" [package.metadata.generate-rpm] assets = [{ source = "target/release/topgrade", dest = "/usr/bin/topgrade" }] diff --git a/src/steps/os/windows.rs b/src/steps/os/windows.rs index a459584f..4f9c9f37 100644 --- a/src/steps/os/windows.rs +++ b/src/steps/os/windows.rs @@ -13,6 +13,8 @@ use crate::utils::{require, which}; use crate::{error::SkipStep, steps::git::Repositories}; use crate::{powershell, Step}; +use os_info; + pub fn run_chocolatey(ctx: &ExecutionContext) -> Result<()> { let choco = require("choco")?; let yes = ctx.config().yes(Step::Chocolatey); @@ -212,6 +214,14 @@ pub fn windows_update(ctx: &ExecutionContext) -> Result<()> { return powershell.windows_update(ctx); } + let info: os_info::Info = os_info::get(); + let edition: String = info.edition().unwrap_or("Unknown").to_string(); + if edition.contains("Windows 11") { + print_separator("Windows Update"); + println!("Windows 11 does not support Windows Update via usoclient.exe. Consider installing PSWindowsUpdate"); + return Ok(()); + } + let usoclient = require("UsoClient")?; print_separator("Windows Update");