mirror of
https://github.com/ChrisTitusTech/winutil
synced 2026-02-05 23:40:10 +00:00
Rework ADK detection
This commit is contained in:
@@ -122,11 +122,17 @@ function Invoke-MicrowinGetIso {
|
|||||||
Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo"
|
Set-WinUtilTaskbaritem -state "Indeterminate" -overlay "logo"
|
||||||
Invoke-MicrowinBusyInfo -action "wip" -message "Checking system requirements..." -interactive $false
|
Invoke-MicrowinBusyInfo -action "wip" -message "Checking system requirements..." -interactive $false
|
||||||
|
|
||||||
|
$adkKitsRoot = Microwin-GetKitsRoot -wow64environment $false
|
||||||
|
$adkKitsRoot_WOW64Environ = Microwin-GetKitsRoot -wow64environment $true
|
||||||
|
|
||||||
|
$expectedADKPath = "$($adkKitsRoot)Assessment and Deployment Kit"
|
||||||
|
$expectedADKPath_WOW64Environ = "$($adkKitsRoot_WOW64Environ)Assessment and Deployment Kit"
|
||||||
|
|
||||||
$oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe'
|
$oscdimgPath = Join-Path $env:TEMP 'oscdimg.exe'
|
||||||
$oscdImgFound = [bool] (Get-Command -ErrorAction Ignore -Type Application oscdimg.exe) -or (Test-Path $oscdimgPath -PathType Leaf)
|
$oscdImgFound = [bool] (Microwin-TestKitsRootPaths -adkKitsRootPath "$expectedADKPath" -adkKitsRootPath_WOW64Environ "$expectedADKPath_WOW64Environ") -or (Test-Path $oscdimgPath -PathType Leaf)
|
||||||
Write-Host "oscdimg.exe on system: $oscdImgFound"
|
Write-Host "oscdimg.exe on system: $oscdImgFound"
|
||||||
|
|
||||||
if (!$oscdImgFound) {
|
if (-not ($oscdImgFound)) {
|
||||||
$downloadFromGitHub = $sync.WPFMicrowinDownloadFromGitHub.IsChecked
|
$downloadFromGitHub = $sync.WPFMicrowinDownloadFromGitHub.IsChecked
|
||||||
|
|
||||||
if (!$downloadFromGitHub) {
|
if (!$downloadFromGitHub) {
|
||||||
@@ -162,6 +168,30 @@ function Invoke-MicrowinGetIso {
|
|||||||
Write-Host "oscdimg.exe was successfully downloaded from github"
|
Write-Host "oscdimg.exe was successfully downloaded from github"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} elseif (Microwin-TestKitsRootPaths -adkKitsRootPath "$expectedADKPath" -adkKitsRootPath_WOW64Environ "$expectedADKPath_WOW64Environ") {
|
||||||
|
# We have to guess where oscdimg is. We'll check both values...
|
||||||
|
$peToolsPath = ""
|
||||||
|
|
||||||
|
if ($expectedADKPath -ne "Assessment and Deployment Kit") { $peToolsPath = $expectedADKPath }
|
||||||
|
if (($peToolsPath -eq "") -and ($expectedADKPath_WOW64Environ -ne "Assessment and Deployment Kit")) { $peToolsPath = $expectedADKPath_WOW64Environ }
|
||||||
|
|
||||||
|
Write-Host "Using $peToolsPath as the Preinstallation Environment tools path..."
|
||||||
|
# Paths change depending on platform
|
||||||
|
if ([Environment]::Is64BitOperatingSystem) {
|
||||||
|
$oscdimgPath = "$peToolsPath\Deployment Tools\amd64\Oscdimg\oscdimg.exe"
|
||||||
|
} else {
|
||||||
|
$oscdimgPath = "$peToolsPath\Deployment Tools\x86\Oscdimg\oscdimg.exe"
|
||||||
|
}
|
||||||
|
|
||||||
|
# If it's a non-existent file, we won't continue.
|
||||||
|
if (-not (Test-Path -Path "$oscdimgPath" -PathType Leaf)) {
|
||||||
|
$oscdimgFound = $false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not ($oscdimgFound)) {
|
||||||
|
[System.Windows.MessageBox]::Show("oscdimg.exe is not found on the system. Cannot continue.")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
Invoke-MicrowinBusyInfo -action "wip" -message "Checking disk space..." -interactive $false
|
Invoke-MicrowinBusyInfo -action "wip" -message "Checking disk space..." -interactive $false
|
||||||
|
|||||||
40
functions/microwin/Microwin-GetKitsRoot.ps1
Normal file
40
functions/microwin/Microwin-GetKitsRoot.ps1
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
function Microwin-GetKitsRoot {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Gets the kits root path for the Windows Assessment and Deployment Kit (ADK)
|
||||||
|
.PARAMETER wow64environment
|
||||||
|
Determines whether to search in a WOW64 compatibility environment (HKLM\SOFTWARE\WOW6432Node)
|
||||||
|
.OUTPUTS
|
||||||
|
The path to the kits root
|
||||||
|
#>
|
||||||
|
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory = $true, Position = 0)] [bool]$wow64environment
|
||||||
|
)
|
||||||
|
|
||||||
|
$adk10KitsRoot = ""
|
||||||
|
|
||||||
|
# if we set the wow64 bit on and we're on a 32-bit system, then we prematurely return the value
|
||||||
|
if (($wow64environment -eq $true) -and (-not [Environment]::Is64BitOperatingSystem)) {
|
||||||
|
return $adk10KitsRoot
|
||||||
|
}
|
||||||
|
|
||||||
|
$regPath = ""
|
||||||
|
if ($wow64environment) {
|
||||||
|
$regPath = "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows Kits\Installed Roots"
|
||||||
|
} else {
|
||||||
|
$regPath = "HKLM:\SOFTWARE\Microsoft\Windows Kits\Installed Roots"
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((Test-Path "$regPath") -eq $false) {
|
||||||
|
return $adk10KitsRoot
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$adk10KitsRoot = Get-ItemPropertyValue -Path $regPath -Name "KitsRoot10" -ErrorAction Stop
|
||||||
|
} catch {
|
||||||
|
Write-Host "Could not find ADK."
|
||||||
|
}
|
||||||
|
|
||||||
|
return $adk10KitsRoot
|
||||||
|
}
|
||||||
11
functions/microwin/Microwin-TestKitsRootPaths.ps1
Normal file
11
functions/microwin/Microwin-TestKitsRootPaths.ps1
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
function Microwin-TestKitsRootPaths {
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory = $true, Position = 0)] [string]$adkKitsRootPath,
|
||||||
|
[Parameter(Mandatory = $true, Position = 1)] [string]$adkKitsRootPath_WOW64Environ
|
||||||
|
)
|
||||||
|
|
||||||
|
if (Test-Path "$adkKitsRootPath") { return $true }
|
||||||
|
if (Test-Path "$adkKitsRootPath_WOW64Environ") { return $true }
|
||||||
|
|
||||||
|
return $false
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user