mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 18:57:19 +02:00
[CmdNotFound]Improve installation workflow (#30727)
* [CmdNotFound]Improve installation workflow * Fix typo * Fix XAML styling * Update src/settings-ui/Settings.UI/SettingsXAML/Views/CmdNotFoundPage.xaml Co-authored-by: Davide Giacometti <davide.giacometti@outlook.it> * Update src/settings-ui/Settings.UI/SettingsXAML/Views/CmdNotFoundPage.xaml Co-authored-by: Davide Giacometti <davide.giacometti@outlook.it> * Update src/settings-ui/Settings.UI/SettingsXAML/Views/CmdNotFoundPage.xaml Co-authored-by: Davide Giacometti <davide.giacometti@outlook.it> * Update src/settings-ui/Settings.UI/SettingsXAML/Views/CmdNotFoundPage.xaml Co-authored-by: Davide Giacometti <davide.giacometti@outlook.it> * Update src/settings-ui/Settings.UI/SettingsXAML/Views/CmdNotFoundPage.xaml Co-authored-by: Davide Giacometti <davide.giacometti@outlook.it> * Update src/settings-ui/Settings.UI/SettingsXAML/Views/CmdNotFoundPage.xaml Co-authored-by: Davide Giacometti <davide.giacometti@outlook.it> * Don't create window for checking requirements * Hide install/uninstall buttons for CmdNotFound module * Also install winget before Powershell 7 * Better detect processor architecture * Fix spellcheck * [CMDNotFound] UX improvements (#30740) * UI improvements * Updated label * Update CmdNotFoundPage.xaml * Update CmdNotFoundPage.xaml * Update CmdNotFoundPage.xaml * Better version detection * Add some logging * Add missing package install that's a prerequisite for winget * Remove unused AllExperiments include * Fix Logger library include * Update PATH Environment variable after installing PS * Fix OOBE UI spacing * Use Invoke-WebRequest to get the deps and then install them from local path * Spellcheck * TEMP -> TMP * User path is supposed to come after machine path --------- Co-authored-by: Davide Giacometti <davide.giacometti@outlook.it> Co-authored-by: Niels Laute <niels.laute@live.nl> Co-authored-by: Stefan Markovic <stefan@janeasystems.com>
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
Write-Host $PSVersionTable
|
||||
if ($PSVersionTable.PSVersion -ge 7.4)
|
||||
{
|
||||
Write-Host "PowerShell 7.4 or greater detected."
|
||||
# This message will be compared against in Command Not Found Settings page code behind. Take care when changing it.
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "PowerShell 7.4 or greater not detected. Installation instructions can be found on https://learn.microsoft.com/powershell/scripting/install/installing-powershell-on-windows `r`n"
|
||||
# This message will be compared against in Command Not Found Settings page code behind. Take care when changing it.
|
||||
}
|
||||
|
||||
if (Get-Module -ListAvailable -Name Microsoft.WinGet.Client)
|
||||
{
|
||||
Write-Host "WinGet Client module detected."
|
||||
# This message will be compared against in Command Not Found Settings page code behind. Take care when changing it.
|
||||
}
|
||||
else {
|
||||
Write-Host "WinGet Client module not detected. Installation instructions can be found on https://www.powershellgallery.com/packages/Microsoft.WinGet.Client `r`n"
|
||||
# This message will be compared against in Command Not Found Settings page code behind. Take care when changing it.
|
||||
}
|
||||
|
||||
if (!(Test-Path $PROFILE))
|
||||
{
|
||||
Write-Host "Profile file $PROFILE not found".
|
||||
New-Item -Path $PROFILE -ItemType File
|
||||
Write-Host "Created profile file $PROFILE".
|
||||
}
|
||||
|
||||
$profileContent = Get-Content -Path $PROFILE -Raw
|
||||
|
||||
if ((-not [string]::IsNullOrEmpty($profileContent)) -and ($profileContent.Contains("34de4b3d-13a8-4540-b76d-b9e8d3851756")))
|
||||
{
|
||||
Write-Host "Command Not Found module is registered in the profile file."
|
||||
# This message will be compared against in Command Not Found Settings page code behind. Take care when changing it.
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Command Not Found module is not registered in the profile file."
|
||||
# This message will be compared against in Command Not Found Settings page code behind. Take care when changing it.
|
||||
}
|
||||
@@ -30,6 +30,8 @@ if($atLeastOneInstanceFound)
|
||||
{
|
||||
Set-Content -Path $PROFILE -Value $newContent
|
||||
Write-Host "Removed the Command Not Found reference from the profile file."
|
||||
# This message will be compared against in Command Not Found Settings page code behind. Take care when changing it.
|
||||
} else {
|
||||
Write-Host "No instance of Command Not Found was found in the profile file."
|
||||
# This message will be compared against in Command Not Found Settings page code behind. Take care when changing it.
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ $profileContent = Get-Content -Path $PROFILE -Raw
|
||||
if ((-not [string]::IsNullOrEmpty($profileContent)) -and ($profileContent.Contains("34de4b3d-13a8-4540-b76d-b9e8d3851756")))
|
||||
{
|
||||
Write-Host "Module is already registered in the profile file."
|
||||
# This message will be compared against in Command Not Found Settings page code behind. Take care when changing it.
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -35,4 +36,5 @@ else
|
||||
Add-Content -Path $PROFILE -Value "`r`nImport-Module `"$scriptPath\WinGetCommandNotFound.psd1`""
|
||||
Add-Content -Path $PROFILE -Value "#34de4b3d-13a8-4540-b76d-b9e8d3851756"
|
||||
Write-Host "Module was successfully registered in the profile file."
|
||||
# This message will be compared against in Command Not Found Settings page code behind. Take care when changing it.
|
||||
}
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
|
||||
if ((Get-AppxPackage microsoft.DesktopAppInstaller).Version -ge [System.Version]"1.21")
|
||||
{
|
||||
Write-Host "Detected winget. Will try to install PowerShell."
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "WinGet not detected. Will try to install."
|
||||
# To speed up Invoke-WebRequest. Older versions are very slow when printing the progress.
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
$cpuArchitecture="x64"
|
||||
$detectedArchitecture=""
|
||||
if ($env:PROCESSOR_ARCHITEW6432 -eq $null) {
|
||||
$detectedArchitecture=$env:PROCESSOR_ARCHITECTURE
|
||||
} else {
|
||||
$detectedArchitecture=$env:PROCESSOR_ARCHITEW6432
|
||||
}
|
||||
Write-Host "Detected the CPU architecture:$detectedArchitecture"
|
||||
if ($detectedArchitecture -ne "AMD64")
|
||||
{
|
||||
Write-Host "Mismatch with AMD64, setting it to arm64, since that's where we're likely running."
|
||||
$cpuArchitecture="arm64"
|
||||
}
|
||||
if((Get-AppxPackage Microsoft.VCLibs.140.00).Version -ge [System.Version]"14.0.30704")
|
||||
{
|
||||
Write-Host "Detected Microsoft.VCLibs.140.00."
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Microsoft.VCLibs.140.00 not detected. Will try to install."
|
||||
Invoke-WebRequest -Uri https://aka.ms/Microsoft.VCLibs.$cpuArchitecture.14.00.Desktop.appx -OutFile "$Env:TMP\Microsoft.VCLibs.14.00.appx"
|
||||
Add-AppxPackage -Path "$Env:TMP\Microsoft.VCLibs.14.00.appx"
|
||||
Remove-Item -Path "$Env:TMP\Microsoft.VCLibs.14.00.appx" -Force
|
||||
}
|
||||
if((Get-AppxPackage Microsoft.VCLibs.140.00.UWPDesktop).Version -ge [System.Version]"14.0.30704")
|
||||
{
|
||||
Write-Host "Detected Microsoft.VCLibs.140.00.UWPDesktop"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Microsoft.VCLibs.140.00.UWPDesktop not detected. Will try to install."
|
||||
Invoke-WebRequest -Uri https://aka.ms/Microsoft.VCLibs.$cpuArchitecture.14.00.Desktop.appx -OutFile "$Env:TMP\Microsoft.VCLibs.14.00.Desktop.appx"
|
||||
Add-AppxPackage -Path "$Env:TMP\Microsoft.VCLibs.14.00.Desktop.appx"
|
||||
Remove-Item -Path "$Env:TMP\Microsoft.VCLibs.14.00.Desktop.appx" -Force
|
||||
}
|
||||
if (Get-AppxPackage Microsoft.UI.Xaml.2.7)
|
||||
{
|
||||
Write-Host "Detected Microsoft.UI.Xaml.2.7"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Microsoft.UI.Xaml.2.7 not detected. Will try to install."
|
||||
Write-Host "Downloading to $Env:TMP\microsoft.ui.xaml.2.7.3.zip"
|
||||
Invoke-WebRequest -Uri https://www.nuget.org/api/v2/package/Microsoft.UI.Xaml/2.7.3 -OutFile "$Env:TMP\microsoft.ui.xaml.2.7.3.zip"
|
||||
Write-Host "Extracting $Env:TMP\microsoft.ui.xaml.2.7.3.zip"
|
||||
Expand-Archive "$Env:TMP\microsoft.ui.xaml.2.7.3.zip" -DestinationPath "$Env:TMP\microsoft.ui.xaml.2.7.3"
|
||||
Write-Host "Installing $Env:TMP\microsoft.ui.xaml.2.7.3\tools\AppX\$cpuArchitecture\Release\Microsoft.UI.Xaml.2.7.appx"
|
||||
Add-AppxPackage "$Env:TMP\microsoft.ui.xaml.2.7.3\tools\AppX\$cpuArchitecture\Release\Microsoft.UI.Xaml.2.7.appx"
|
||||
Remove-Item -Path "$Env:TMP\microsoft.ui.xaml.2.7.3" -Recurse -Force
|
||||
Remove-Item -Path "$Env:TMP\microsoft.ui.xaml.2.7.3.zip" -Force
|
||||
}
|
||||
Write-Host "Getting winget to the latest stable"
|
||||
Invoke-WebRequest -Uri https://aka.ms/getwinget -OutFile "$Env:TMP\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle"
|
||||
Add-AppxPackage -Path "$Env:TMP\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle"
|
||||
Remove-Item -Path "$Env:TMP\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle" -Force
|
||||
|
||||
#winget is not visible right away, so reload the PATH variable.
|
||||
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
|
||||
}
|
||||
|
||||
winget install Microsoft.PowerShell --source winget
|
||||
if ($LASTEXITCODE -eq 0)
|
||||
{
|
||||
Write-Host "Powershell 7 successfully installed."
|
||||
# This message will be compared against in Command Not Found Settings page code behind. Take care when changing it.
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Powershell 7 was not installed."
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
if (Get-Module -ListAvailable -Name Microsoft.WinGet.Client)
|
||||
{
|
||||
Write-Host "WinGet Client module detected."
|
||||
# This message will be compared against in Command Not Found Settings page code behind. Take care when changing it.
|
||||
}
|
||||
else {
|
||||
Install-Module -Name Microsoft.WinGet.Client
|
||||
if (Get-Module -ListAvailable -Name Microsoft.WinGet.Client)
|
||||
{
|
||||
Write-Host "WinGet Client module detected."
|
||||
# This message will be compared against in Command Not Found Settings page code behind. Take care when changing it.
|
||||
} else {
|
||||
Write-Host "WinGet Client module not detected. Installation instructions can be found on https://www.powershellgallery.com/packages/Microsoft.WinGet.Client `r`n"
|
||||
# This message will be compared against in Command Not Found Settings page code behind. Take care when changing it.
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user