fix(collector): launch via Setup\CmdLine (was bypassed) + WinPE diagnostics
Some checks failed
Build SilverMetal Enhanced - Windows ISO / build (pull_request) Failing after 4m8s
Some checks failed
Build SilverMetal Enhanced - Windows ISO / build (pull_request) Failing after 4m8s
The boot.wim Setup\CmdLine override (legacy-Setup forcing) is authoritative over winpeshl.ini, so it launched setup.exe directly and the collector never ran -- the VM went straight to the old sm-bootstrap unattended install. Repoint Setup\CmdLine at the collector (cmd /c X:\sm\Start-Collector.cmd); the collector still launches the legacy X:\sources\setup.exe itself. Add wpeinit + an on-screen banner, and write any collector/WinForms-load failure to X:\sm\collector-error.txt shown on the console before falling back, so we can diagnose WinForms-in-WinPE. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -250,6 +250,9 @@ try {
|
||||
[Environment]::Exit(1)
|
||||
}
|
||||
catch {
|
||||
# Any failure -> exit 1 so Start-Collector.cmd falls back to the default answer file.
|
||||
# Any failure (e.g. WinForms can't load in WinPE) -> log it where Start-Collector.cmd
|
||||
# can show it on the console, then exit 1 so the wrapper falls back to the default answer file.
|
||||
try { ($_ | Out-String) | Set-Content 'X:\sm\collector-error.txt' -Encoding ASCII } catch {}
|
||||
Write-Host ('Collector error: ' + ($_ | Out-String))
|
||||
[Environment]::Exit(1)
|
||||
}
|
||||
|
||||
@@ -1,15 +1,26 @@
|
||||
@echo off
|
||||
set "SETUP=X:\sources\setup.exe"
|
||||
if not exist "%SETUP%" set "SETUP=X:\setup.exe"
|
||||
REM WinPE entry point. SM_UNATTENDED=1 -> skip the UI and launch Setup with the default
|
||||
REM answer file (used by CI / non-interactive builds).
|
||||
REM WinPE entry point (launched via Setup\CmdLine). SM_UNATTENDED=1 -> skip the UI and
|
||||
REM launch Setup with the default answer file (used by CI / non-interactive builds).
|
||||
if "%SM_UNATTENDED%"=="1" (
|
||||
start /wait "%SETUP%" /unattend:X:\autounattend.xml
|
||||
exit /b 0
|
||||
)
|
||||
REM Initialise WinPE (a Setup\CmdLine launch can bypass the normal startnet/wpeinit).
|
||||
wpeinit
|
||||
echo ============================================
|
||||
echo SilverMetal pre-config collector
|
||||
echo ============================================
|
||||
del /f /q X:\sm\collector-error.txt 2>nul
|
||||
powershell -NoProfile -ExecutionPolicy Bypass -File X:\sm\Collector.ps1
|
||||
if errorlevel 1 (
|
||||
REM Collector failed or was cancelled -> fall back to the default answer file so install still proceeds.
|
||||
set RC=%errorlevel%
|
||||
if %RC% GEQ 1 (
|
||||
echo.
|
||||
echo Collector exited with code %RC% -- falling back to default unattended install.
|
||||
if exist X:\sm\collector-error.txt type X:\sm\collector-error.txt
|
||||
echo (pausing ~25s so this is readable on the console)
|
||||
ping -n 26 127.0.0.1 >nul
|
||||
start /wait "%SETUP%" /unattend:X:\autounattend.xml
|
||||
)
|
||||
exit /b 0
|
||||
|
||||
@@ -130,8 +130,13 @@ function Invoke-ForceLegacySetup {
|
||||
Copy-Item (Join-Path $PSScriptRoot '..\collector\*') $smDir -Recurse -Force
|
||||
Copy-Item (Join-Path $smDir 'winpeshl.ini') (Join-Path $bootmnt 'Windows\System32\winpeshl.ini') -Force
|
||||
Write-Host " staged collector to boot.wim \sm\ + winpeshl.ini"
|
||||
$setup = if (Test-Path (Join-Path $bootmnt 'sources\setup.exe')) { 'X:\sources\setup.exe' } else { 'X:\setup.exe' }
|
||||
$cmdline = "$setup /unattend:X:\autounattend.xml"
|
||||
# Setup\CmdLine is the WinPE setup-image shell launch and is AUTHORITATIVE over
|
||||
# winpeshl.ini -- point it at the SilverMetal collector so the pre-config UI runs
|
||||
# FIRST. The collector then launches the LEGACY setup.exe itself (X:\sources\setup.exe,
|
||||
# preserving the legacy-Setup bypass) with its generated answer file, or falls back to
|
||||
# the default autounattend.xml on cancel/error. (Pointing Setup\CmdLine straight at
|
||||
# setup.exe bypassed the collector entirely -- it won over winpeshl.ini.)
|
||||
$cmdline = "cmd /c X:\sm\Start-Collector.cmd"
|
||||
$hive = Join-Path $bootmnt 'Windows\System32\config\SYSTEM'
|
||||
& reg load 'HKLM\SM_BOOT' $hive | Out-Null
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user