From fdadd9aa03fbca1e89a7825e88571b71deb53acc Mon Sep 17 00:00:00 2001 From: "Michael H.G. Schmidt" Date: Mon, 20 Feb 2023 15:11:28 +0100 Subject: [PATCH] reorg: UEFI/BIOS selection is now in installer! --- 03_PrepareBoot.cmd | 1 + 06_Copy2Media.cmd | 92 +++++------------------------------------- image/finish-boot.cmd | 75 +++++++++++++++++++++++++++++++--- image/installer.exe | Bin 62464 -> 62464 bytes source/installer.pb | 39 +++++++++--------- 5 files changed, 102 insertions(+), 105 deletions(-) diff --git a/03_PrepareBoot.cmd b/03_PrepareBoot.cmd index 6c3925c..6a673c7 100644 --- a/03_PrepareBoot.cmd +++ b/03_PrepareBoot.cmd @@ -31,3 +31,4 @@ echo. echo ====== echo READY. echo ====== + diff --git a/06_Copy2Media.cmd b/06_Copy2Media.cmd index fe8856d..3dc65c4 100644 --- a/06_Copy2Media.cmd +++ b/06_Copy2Media.cmd @@ -4,36 +4,12 @@ set W10=c:\TEMP\W10 set SOURCES=%W10%\sources set BOOTFILE=boot.wim set IMAGEFILE=install.wim -set SCRIPT_SETTINGS=scripts\settings.cmd -set COMPANY_SETTINGS=company\settings.cmd -set LANG=en-US +rem set SCRIPT_SETTINGS=scripts\settings.cmd +rem set COMPANY_SETTINGS=company\settings.cmd set FOURGB=4294967296 -set MYUSER= -set MYNAME= -set MYPASS= IF %1.==. GOTO USAGE -rem =================== -rem CONFIGFILE CHECK -rem =================== - -echo searching for SCRIPT settings ... -if NOT EXIST %SCRIPT_SETTINGS% ( - echo INFO: config file %SCRIPT_SETTINGS% NOT FOUND -) else ( - echo OK. Loading SCRIPT settings ... - call %SCRIPT_SETTINGS% -) - -echo searching for COMPANY settings ... -if NOT EXIST %COMPANY_SETTINGS% ( - echo INFO: config file %COMPANY_SETTINGS% NOT FOUND -) else ( - echo OK. Loading COMPANY settings ... - call %COMPANY_SETTINGS% -) - echo. echo ================================= echo Copying all data to Media ... @@ -57,20 +33,12 @@ echo. rem get drive type (is it fat32 ?) ... for /f "tokens=5" %%A in ('@fsutil fsinfo volumeinfo %DRIVE%^|findstr /B "File System Name : "') do (@set DRIVETYPE=%%A) -echo INFO: DRIVETPYE = [ %DRIVETYPE% ] +echo DRIVETPYE = [ %DRIVETYPE% ] rem ===== rem MAIN rem ===== -echo. -echo IMPORTANT: -echo How is your target media formatted? -echo - use "exfat" for BIOS based installations only! -echo - use "fat32" for UEFI based installations only! -echo REASON: UEFI cannot read "exfat" filesystems and Windows setup will throw error code: 0x80042565 -echo. - rem check SOURCE for files LARGER 4 GB in case FAT32 was chosen ... if /i "%DRIVETYPE%" EQU "fat32" ( for /f "tokens=*" %%F in ('"dir /S /B /A-D %W10%"') do if %%~zF GTR %FOURGB% ( @@ -79,53 +47,6 @@ if /i "%DRIVETYPE%" EQU "fat32" ( ) ) -set answer=B -:ask - set /p answer="BIOS(default) or UEFI setup (B/U)? " - if /i "%answer:~,1%" EQU "B" ( - echo selected: BIOS - copy /Y image\autounattend_BIOS_template.xml %DRIVE%\autounattend.xml - GOTO CONT - ) - if /i "%answer:~,1%" EQU "U" ( - echo selected: UEFI - copy /Y image\autounattend_UEFI_template.xml %DRIVE%\autounattend.xml - GOTO CONT - ) - echo Please type B for BIOS or U for UEFI setup. - goto ask -:CONT - -rem ask for user ... -if "@%localadmin%" NEQ "@" ( - set MYUSER=%localadmin% -) else ( - echo. - set /p MYUSER="Username (%MYUSER%)? " -) - -rem ask for real name ... -if "@%localadmin_name%" NEQ "@" ( - set MYNAME=%localadmin_name% -) else ( - echo. - set /p MYNAME="Display Name (%MYNAME%)? " -) - -rem ask for a password ... -if "@%localadmin_password%" NEQ "@" ( - set MYPASS=%localadmin_password% -) else ( - echo. - set /p MYPASS="Password (not set)? " -) - -echo. -tools\searchreplace %DRIVE%\autounattend.xml ___MYUSER___ "%MYUSER%" -tools\searchreplace %DRIVE%\autounattend.xml ___MYNAME___ "%MYNAME%" -tools\searchreplace %DRIVE%\autounattend.xml ___MYPASS___ "%MYPASS%" /S -tools\searchreplace %DRIVE%\autounattend.xml ___MYLANG___ "%LANG%" - if NOT EXIST %SOURCES%\%BOOTFILE% ( echo DOH! no %BOOTFILE% in [ %SOURCES% ] found exit /b @@ -171,6 +92,13 @@ echo. echo putting copytools script to %DRIVE% ... copy /Y image\CopyTools.cmd %DRIVE%\ +echo. +echo IMPORTANT HINT: +echo How is your target media formatted? +echo - use "exfat" for BIOS based installations only! +echo - use "fat32" for UEFI based installations only! +echo REASON: UEFI cannot read "exfat" filesystems and Windows setup will throw error code: 0x80042565 + echo. echo ====== echo READY. diff --git a/image/finish-boot.cmd b/image/finish-boot.cmd index a9d2189..28c1d8e 100644 --- a/image/finish-boot.cmd +++ b/image/finish-boot.cmd @@ -1,14 +1,36 @@ @echo off set SOURCES=%SystemDrive%\TEMP\W10\sources set BOOT=%SystemDrive%\TEMP\BOOT -set SETTINGS=..\scripts\settings.cmd +set SCRIPT_SETTINGS=..\scripts\settings.cmd +set COMPANY_SETTINGS=..\company\settings.cmd +set LANG=en-US +set MYUSER= +set MYNAME= +set MYPASS= -if EXIST %SETTINGS% ( - call %SETTINGS% +rem =================== +rem CONFIGFILE CHECK +rem =================== + +echo searching for SCRIPT settings ... +if NOT EXIST %SCRIPT_SETTINGS% ( + echo INFO: config file %SCRIPT_SETTINGS% NOT FOUND ) else ( - set LANG=en-US + echo OK. Loading SCRIPT settings ... + call %SCRIPT_SETTINGS% ) -echo LANG=%LANG% + +echo searching for COMPANY settings ... +if NOT EXIST %COMPANY_SETTINGS% ( + echo INFO: config file %COMPANY_SETTINGS% NOT FOUND +) else ( + echo OK. Loading COMPANY settings ... + call %COMPANY_SETTINGS% +) + +rem ====== +rem MAIN +rem ====== if NOT EXIST %BOOT%\winsetup.exe ( echo renaming Windows setup.exe to boot image ... @@ -22,6 +44,49 @@ dism /image:%BOOT% /Set-SysLocale:%LANG% || exit /b 1 echo replacing setup.exe with our installer utility ... copy /Y installer.exe %BOOT%\setup.exe +rem ask for user ... +if "@%localadmin%" NEQ "@" ( + set MYUSER=%localadmin% +) else ( + echo. + set /p MYUSER="Username (%MYUSER%)? " +) + +rem ask for real name ... +if "@%localadmin_name%" NEQ "@" ( + set MYNAME=%localadmin_name% +) else ( + echo. + set /p MYNAME="Display Name (%MYNAME%)? " +) + +rem ask for a password ... +if "@%localadmin_password%" NEQ "@" ( + set MYPASS=%localadmin_password% +) else ( + echo. + set /p MYPASS="Password (not set)? " +) + +echo copying config for unattended install ... +copy /Y autounattend_BIOS_template.xml %BOOT%\autounattend_BIOS.xml +copy /Y autounattend_UEFI_template.xml %BOOT%\autounattend_UEFI.xml +echo. + +rem prepare BIOS version ... +..\tools\searchreplace %BOOT%\autounattend_BIOS.xml ___MYUSER___ "%MYUSER%" +..\tools\searchreplace %BOOT%\autounattend_BIOS.xml ___MYNAME___ "%MYNAME%" +..\tools\searchreplace %BOOT%\autounattend_BIOS.xml ___MYPASS___ "%MYPASS%" /S +..\tools\searchreplace %BOOT%\autounattend_BIOS.xml ___MYLANG___ "%LANG%" +echo. + +rem prepare UEFI version ... +..\tools\searchreplace %BOOT%\autounattend_UEFI.xml ___MYUSER___ "%MYUSER%" +..\tools\searchreplace %BOOT%\autounattend_UEFI.xml ___MYNAME___ "%MYNAME%" +..\tools\searchreplace %BOOT%\autounattend_UEFI.xml ___MYPASS___ "%MYPASS%" /S +..\tools\searchreplace %BOOT%\autounattend_UEFI.xml ___MYLANG___ "%LANG%" +echo. + if EXIST ..\company\snapshot64.exe ( echo copying LICENSED snapshot64.exe to boot image ... copy /Y ..\company\snapshot64.exe %BOOT% diff --git a/image/installer.exe b/image/installer.exe index baae307abbee45c8c7b0bb002ec2a3c049837ff4..d0ab619155615cf1a7f5fd44bd85d8c84eb4d9b9 100644 GIT binary patch delta 13967 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 delta 13508 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 e{{MN1*5Uu#d8i{|;(wlpN}As|-++ym7W^+Yj