miscellaneous-scripts/vc-redist-check/VCRedistCheck.ps1

87 lines
2.2 KiB
PowerShell

param (
[parameter(Mandatory=$false)]
[Alias('i')]
[switch]
$InteractiveMode = $false
)
$host.ui.RawUI.WindowTitle = "VC Redist Check"
$FoundMessage = 'Found! Detected Version {0}'
# Check the major version.
$VC_Runtimes_x86_Path = 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x86';
Write-Host
Write-Host "Checking version number in $VC_Runtimes_x86_Path..."
$Major = 0
try {
$Major = Get-ItemPropertyValue -Path $VC_Runtimes_x86_Path -Name Major
}
catch {
}
if ($Major -ge 14) {
try {
$Minor = Get-ItemPropertyValue -Path $VC_Runtimes_x86_Path -Name Minor
}
catch {
$Minor = -1
}
$Version = $Major;
if ($Minor -ge 0) {
$Version += ".$Minor"
}
Write-Host
Write-Host ($FoundMessage -f $Version)
Write-Host
if ($InteractiveMode) {
Pause
}
return
}
# Check if installed.
$HklmBasePath = 'HKLM:\SOFTWARE\Classes\Installer\Dependencies'
#$HkcrBasePath = 'HKCR:\Installer\Dependencies\VC,redist.x86,x86,14.{0},bundle\Dpendents'
$HkcrBasePath = "$HklmBasePath\VC,redist.x86,x86,14.{0},bundle\Dependents"
$KeyHash = @{
"14.0" = "$HklmBasePath\{e2803110-78b3-4664-a479-3611a381656a}" #2015
"14.16" = "$($HkcrBasePath -f '16')\{67f67547-9693-4937-aa13-56e296bd40f6}" #2017
"14.21" = "$($HkcrBasePath -f '21')\{49697869-be8e-427d-81a0-c334d1d14950}" #2019 14.21
"14.22" = "$($HkcrBasePath -f '22')\{5bfc1380-fd35-4b85-9715-7351535d077e}" #2019 14.22
"14.24" = "$($HkcrBasePath -f '24')\{e31cb1a4-76b5-46a5-a084-3fa419e82201}" #2019 14.24
"14.36" = "$($HkcrBasePath -f '36')\{410c0ee1-00bb-41b6-9772-e12c2828b02f}" #2022
}
function IsInstalled {
$KeyHash.Keys | ForEach-Object {
Write-Host $KeyHash[$_]
$FoundKey = Test-Path $KeyHash[$_]
if ($FoundKey) {
return $_
}
}
}
$NotFoundMessage = 'Not found: Cannot confirm that VC++ Redistributable 2015 is installed.'
$Message = '';
Write-Host 'Checking known registry locations for installation...'
$Version = IsInstalled
if ($Version) {
$Message = $FoundMessage -f $Version
}
else {
$Message = $NotFoundMessage
}
Write-Host
Write-Host "$Message"
Write-Host
if ($InteractiveMode) {
Pause
}