# 02-Setup-HeatTreat.ps1 - HeatTreat app setup (runs AFTER 01-eDNC.ps1). # # HeatTreat_6.2.1.msi is a WiX/GE Aviation installer, same lineage as Mark # and eDNC. Decompiled findings: # - LAUNCHNTLARS=true by default and the LaunchNtlars custom action fires # under /qn (condition NOT Installed AND LAUNCHNTLARS="true"). Pass # LAUNCHNTLARS=false to suppress it (same as 01-eDNC.ps1 and Mark). # - No ForceReboot/ScheduleReboot (only WixCheckRebootRequired, which just # sets a flag) - so /norestart is safe. # - Only LaunchCondition is NOT NEWERVERSIONDETECTED (blocks downgrade). # # After the MSI, HeatTreat imports the per-machine DNC config .reg matching # the machine number the tech entered at imaging (6601-6604). The .reg files # ship in this type dir under reg\.reg. Like WJPRT.reg they # target HKLM\SOFTWARE\GE Aircraft Engines\DNC (the 64-bit view as written), # but DNC is a 32-bit app and reads WOW6432Node, so we rewrite the key paths # to WOW6432Node before importing (reg import does not honor /reg:32). # # Log: C:\Logs\HeatTreat\02-Setup-HeatTreat.log $ErrorActionPreference = 'Continue' $logDir = 'C:\Logs\HeatTreat' if (-not (Test-Path $logDir)) { try { New-Item -ItemType Directory -Path $logDir -Force | Out-Null } catch {} } try { Start-Transcript -Path (Join-Path $logDir '02-Setup-HeatTreat.log') -Append -Force | Out-Null } catch {} Write-Host '=== HeatTreat Setup ===' $pxeStatusLib = Join-Path $PSScriptRoot '..\Shopfloor\lib\Send-PxeStatus.ps1' if (Test-Path $pxeStatusLib) { try { . $pxeStatusLib; Send-PxeStatus -Stage '02-Setup-HeatTreat: starting' -StageIndex 3 -StageTotal 8 } catch { } } $payloadDir = Join-Path $PSScriptRoot 'HeatTreat' # ============================================================================ # Install HeatTreat_6.2.1.msi # ============================================================================ $htMsi = Get-ChildItem -Path $payloadDir -Filter 'HeatTreat*.msi' -File -ErrorAction SilentlyContinue | Select-Object -First 1 if ($htMsi) { Write-Host "Installing HeatTreat: $($htMsi.Name)..." $p = Start-Process -FilePath 'msiexec.exe' ` -ArgumentList "/i `"$($htMsi.FullName)`" /qn /norestart LAUNCHNTLARS=false" ` -Wait -PassThru Write-Host " HeatTreat exit code: $($p.ExitCode)" } else { Write-Warning "HeatTreat MSI not found in $payloadDir (expected HeatTreat*.msi) - skipping install" } # ============================================================================ # Import the per-machine DNC config .reg (redirected to WOW6432Node) # ============================================================================ $machineNum = '' $mnFile = 'C:\Enrollment\machine-number.txt' if (Test-Path -LiteralPath $mnFile) { $machineNum = (Get-Content -LiteralPath $mnFile -First 1 -EA 0).Trim() } if ($machineNum) { $regSrc = Join-Path $PSScriptRoot "reg\$machineNum.reg" if (Test-Path -LiteralPath $regSrc) { try { $regText = Get-Content -LiteralPath $regSrc -Raw $redirected = $regText -replace ` 'HKEY_LOCAL_MACHINE\\SOFTWARE\\GE Aircraft Engines', ` 'HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\GE Aircraft Engines' $tmpReg = Join-Path $env:TEMP "$machineNum-wow6432.reg" Set-Content -LiteralPath $tmpReg -Value $redirected -Encoding ASCII -Force Write-Host "Importing $machineNum.reg (redirected to WOW6432Node)..." $r = Start-Process -FilePath 'reg.exe' -ArgumentList "import `"$tmpReg`"" -Wait -PassThru Write-Host " reg import exit code: $($r.ExitCode)" Remove-Item -LiteralPath $tmpReg -Force -ErrorAction SilentlyContinue } catch { Write-Warning "Import of $machineNum.reg failed: $_" } } else { Write-Warning "No DNC .reg for machine number $machineNum at $regSrc - DNC machine config NOT applied" } } else { Write-Warning "machine-number.txt empty/missing - cannot pick a DNC .reg to import" } if (Get-Command Send-PxeStatus -ErrorAction SilentlyContinue) { Send-PxeStatus -Stage '02-Setup-HeatTreat: complete' -StageIndex 4 -StageTotal 8 } Write-Host '=== HeatTreat Setup Complete ===' try { Stop-Transcript | Out-Null } catch {}