From 2b4e2b7560515b76002d0c724bcca1f470ed106f Mon Sep 17 00:00:00 2001 From: Amr Bashir <48618675+amrbashir@users.noreply.github.com> Date: Tue, 4 May 2021 06:26:56 +0200 Subject: [PATCH] feat(cli.rs/info): get webview2 version on windows (#1669) Co-authored-by: Lucas Nogueira --- .changes/cli-rs-info-webview2.md | 5 +++++ tooling/cli.rs/src/info.rs | 28 +++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 .changes/cli-rs-info-webview2.md diff --git a/.changes/cli-rs-info-webview2.md b/.changes/cli-rs-info-webview2.md new file mode 100644 index 000000000..302bda7e1 --- /dev/null +++ b/.changes/cli-rs-info-webview2.md @@ -0,0 +1,5 @@ +--- +"cli.rs": patch +--- + +Adds Webview2 version on `info` command. diff --git a/tooling/cli.rs/src/info.rs b/tooling/cli.rs/src/info.rs index 36c20dcd7..95dea8b50 100644 --- a/tooling/cli.rs/src/info.rs +++ b/tooling/cli.rs/src/info.rs @@ -212,6 +212,29 @@ fn get_version(command: &str, args: &[&str]) -> crate::Result> { Ok(version) } +#[cfg(windows)] +fn webview2_version() -> crate::Result> { + let output = Command::new("powershell") + .args(&["-NoProfile", "-Command"]) + .arg("Get-ItemProperty -Path 'HKLM:\\SOFTWARE\\WOW6432Node\\Microsoft\\EdgeUpdate\\Clients\\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}' | ForEach-Object {$_.pv}") + .output()?; + let version = if output.status.success() { + Some(String::from_utf8_lossy(&output.stdout).replace("\n", "")) + } else { + // check 32bit installation + let output = Command::new("powershell") + .args(&["-NoProfile", "-Command"]) + .arg("Get-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\EdgeUpdate\\Clients\\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}' | ForEach-Object {$_.pv}") + .output()?; + if output.status.success() { + Some(String::from_utf8_lossy(&output.stdout).replace("\n", "")) + } else { + None + } + }; + Ok(version) +} + struct InfoBlock { section: bool, key: &'static str, @@ -289,7 +312,7 @@ impl VersionBlock { if let Some(version) = &self.version { print!(" - {}", version); } else { - print!(" Not installed"); + print!(" - Not installed"); } if let (Some(version), Some(target_version)) = (&self.version, &self.target_version) { let version = semver::Version::parse(version).unwrap(); @@ -322,6 +345,9 @@ impl Info { } .display(); + #[cfg(windows)] + VersionBlock::new("Webview2", webview2_version().unwrap_or_default()).display(); + let hook = panic::take_hook(); panic::set_hook(Box::new(|_info| { // do nothing