You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
314 lines
0 B
314 lines
0 B
2 years ago
|
@setlocal DisableDelayedExpansion
|
||
|
@set uivr=v0.3
|
||
|
@echo off
|
||
|
:: Change to 0 to skip adding SSU to the msu file
|
||
|
set IncludeSSU=1
|
||
|
|
||
|
set _Debug=0
|
||
|
|
||
|
set "_cmdf=%~f0"
|
||
|
if exist "%SystemRoot%\Sysnative\cmd.exe" (
|
||
|
setlocal EnableDelayedExpansion
|
||
|
start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %*"
|
||
|
exit /b
|
||
|
)
|
||
|
if exist "%SystemRoot%\SysArm32\cmd.exe" if /i %PROCESSOR_ARCHITECTURE%==AMD64 (
|
||
|
setlocal EnableDelayedExpansion
|
||
|
start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %*"
|
||
|
exit /b
|
||
|
)
|
||
|
set _dpx=0
|
||
|
set _exd=0
|
||
|
set fail=0
|
||
|
set DD64create=0
|
||
|
set DD86create=0
|
||
|
set "sdl=dpx.dll ReserveManager.dll TurboStack.dll UpdateAgent.dll UpdateCompression.dll wcp.dll"
|
||
|
set "onf=onepackage.AggregatedMetadata.cab"
|
||
|
set "_Null=1>nul 2>nul"
|
||
|
set "_err===== ERROR ===="
|
||
|
set "_ntc===== NOTICE ===="
|
||
|
set "_repo="
|
||
|
set "_args="
|
||
|
set "_args=%~1"
|
||
|
if not defined _args goto :NoProgArgs
|
||
|
if "%~1"=="" set "_args="&goto :NoProgArgs
|
||
|
|
||
|
:NoProgArgs
|
||
|
set "SysPath=%SystemRoot%\System32"
|
||
|
set "Path=%SystemRoot%\System32;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
|
||
|
if exist "%SystemRoot%\Sysnative\reg.exe" (
|
||
|
set "SysPath=%SystemRoot%\Sysnative"
|
||
|
set "Path=%SystemRoot%\Sysnative;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%"
|
||
|
)
|
||
|
set "xOS=amd64"
|
||
|
if /i "%PROCESSOR_ARCHITECTURE%"=="arm64" set "xOS=arm64"
|
||
|
if /i "%PROCESSOR_ARCHITECTURE%"=="x86" if "%PROCESSOR_ARCHITEW6432%"=="" set "xOS=x86"
|
||
|
if /i "%PROCESSOR_ARCHITEW6432%"=="amd64" set "xOS=amd64"
|
||
|
if /i "%PROCESSOR_ARCHITEW6432%"=="arm64" set "xOS=arm64"
|
||
|
set "_log=%~dpn0"
|
||
|
set "_work=%~dp0"
|
||
|
set "_work=%_work:~0,-1%"
|
||
|
set _drv=%~d0
|
||
|
for /f "skip=2 tokens=2*" %%a in ('reg.exe query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do call set "_dsk=%%b"
|
||
|
if exist "%PUBLIC%\Desktop\desktop.ini" set "_dsk=%PUBLIC%\Desktop"
|
||
|
setlocal EnableDelayedExpansion
|
||
|
|
||
|
if defined _args goto :chkarg
|
||
|
if exist "!_work!\*.AggregatedMetadata*.cab" if exist "!_work!\Windows1*-KB*.cab" if exist "!_work!\Windows1*-KB*.psf" (
|
||
|
if exist "!_work!\*DesktopDeployment*.cab" set "_repo=!_work!"
|
||
|
if exist "!_work!\SSU-*-*.cab" set "_repo=!_work!"
|
||
|
)
|
||
|
:chkarg
|
||
|
if not defined _args goto :continue
|
||
|
if exist "!_args!\*.AggregatedMetadata*.cab" if exist "!_args!\Windows1*-KB*.cab" if exist "!_args!\Windows1*-KB*.psf" (
|
||
|
if exist "!_args!\*DesktopDeployment*.cab" set "_repo=!_args!"
|
||
|
if exist "!_args!\SSU-*-*.cab" set "_repo=!_args!"
|
||
|
)
|
||
|
|
||
|
:continue
|
||
|
if %_Debug% equ 0 (
|
||
|
set "_Nul1=1>nul"
|
||
|
set "_Nul2=2>nul"
|
||
|
set "_Nul6=2^>nul"
|
||
|
set "_Nul3=1>nul 2>nul"
|
||
|
set "_Pause=pause >nul"
|
||
|
set "_Exit=echo Press any key to exit."
|
||
|
set "_Supp="
|
||
|
goto :Begin
|
||
|
)
|
||
|
set "_Nul1="
|
||
|
set "_Nul2="
|
||
|
set "_Nul6="
|
||
|
set "_Nul3="
|
||
|
set "_Pause=rem."
|
||
|
set "_Exit=rem."
|
||
|
set "_Supp=1>nul"
|
||
|
copy /y nul "!_work!\#.rw" %_Null% && (if exist "!_work!\#.rw" del /f /q "!_work!\#.rw") || (set "_log=!_dsk!\%~n0")
|
||
|
echo.
|
||
|
echo Running in Debug Mode...
|
||
|
echo The window will be closed when finished
|
||
|
@echo on
|
||
|
@prompt $G
|
||
|
@call :Begin >"!_log!_tmp.log" 2>&1 &cmd /u /c type "!_log!_tmp.log">"!_log!_Debug.log"&del "!_log!_tmp.log"
|
||
|
@color 07
|
||
|
@title %ComSpec%
|
||
|
@exit /b
|
||
|
|
||
|
:Begin
|
||
|
title PSFXv2 MSU Maker %uivr%
|
||
|
if %_Debug% equ 0 if not defined _args @cls
|
||
|
if not defined _repo goto :N_PT
|
||
|
pushd "!_repo!"
|
||
|
for /f "delims=" %%# in ('dir /b /a:-d "*.AggregatedMetadata*.cab"') do set "metaf=%%#"
|
||
|
if /i "%metaf%"=="%onf%" (
|
||
|
ren "%metaf%" "org_%metaf%"
|
||
|
set "metaf=org_%metaf%"
|
||
|
)
|
||
|
expand.exe -f:LCUCompDB*.xml.cab "%metaf%" . %_Null%
|
||
|
if not exist "LCUCompDB*.xml.cab" goto :E_DB
|
||
|
for /f %%# in ('dir /b /a:-d "LCUCompDB*.xml.cab"') do set "dblcu=%%#"
|
||
|
for /f "tokens=2 delims=_." %%# in ('echo %dblcu%') do set "kbn=%%#"
|
||
|
if not exist "Windows1*%kbn%*.cab" set xtn=cab&goto :E_KB
|
||
|
if not exist "Windows1*%kbn%*.psf" set xtn=psf&goto :E_KB
|
||
|
for /f "tokens=3 delims=-_" %%# in ('dir /b /a:-d "Windows1*%kbn%*.cab"') do set "bit=%%~n#"
|
||
|
if exist "Windows1*%kbn%*%bit%*.msu" goto :N_MS
|
||
|
for /f "delims=" %%# in ('dir /b /a:-d "Windows1*%kbn%*%bit%*.cab"') do set "_sCAB=%%#"
|
||
|
for /f "delims=" %%# in ('dir /b /a:-d "Windows1*%kbn%*%bit%*.psf"') do set "_sPSF=%%#"
|
||
|
set "kbf=Windows10.0-%kbn%-%bit%"
|
||
|
if /i "%_sCAB:~0,10%"=="Windows11." set "kbf=Windows11.0-%kbn%-%bit%"
|
||
|
if exist "SSU-*%bit%*.cab" (
|
||
|
for /f "tokens=2 delims=-" %%# in ('dir /b /a:-d "SSU-*%bit%*.cab"') do set "suf=SSU-%%#-%bit%.cab"
|
||
|
for /f "delims=" %%# in ('dir /b /a:-d "SSU-*%bit%*.cab"') do set "_sSSU=%%#"
|
||
|
expand.exe -f:SSUCompDB*.xml.cab "%metaf%" . %_Null%
|
||
|
if exist "SSU*-express.xml.cab" del /f /q "SSU*-express.xml.cab"
|
||
|
if not exist "SSUCompDB*.xml.cab" set IncludeSSU=0
|
||
|
) else (
|
||
|
set IncludeSSU=0
|
||
|
)
|
||
|
if %IncludeSSU% equ 1 for /f %%# in ('dir /b /a:-d "SSUCompDB*.xml.cab"') do set "dbssu=%%#"
|
||
|
set "_sDDD=DesktopDeployment_x86.cab"
|
||
|
if exist "*DesktopDeployment*.cab" (
|
||
|
for /f "delims=" %%# in ('dir /b /a:-d "*DesktopDeployment*.cab" ^|find /i /v "%_sDDD%"') do set "_sDDC=%%#"
|
||
|
)
|
||
|
if exist "%SysPath%\ucrtbase.dll" call :dodpx
|
||
|
if not defined _sDDC (
|
||
|
call set "_sDDC=DesktopDeployment.cab"
|
||
|
call :DDCAB
|
||
|
)
|
||
|
if %fail% equ 1 goto :TheEnd
|
||
|
if defined suf if /i not %bit%==x86 if not exist "%_sDDD%" call :DDC86
|
||
|
call :DDF %onf%
|
||
|
(echo "%dblcu%"
|
||
|
if %IncludeSSU% equ 1 echo "%dbssu%"
|
||
|
)>>zzz.ddf
|
||
|
%_Null% makecab.exe /F zzz.ddf /D Compress=ON /D CompressionType=MSZIP
|
||
|
call :DDF %kbf%.msu
|
||
|
(echo "%_sDDC%" "DesktopDeployment.cab"
|
||
|
if exist "%_sDDD%" echo "%_sDDD%" "DesktopDeployment_x86.cab"
|
||
|
echo "%onf%"
|
||
|
if %IncludeSSU% equ 1 echo "%_sSSU%" "%suf%"
|
||
|
echo "%_sCAB%" "%kbf%.cab"
|
||
|
echo "%_sPSF%" "%kbf%.psf"
|
||
|
)>>zzz.ddf
|
||
|
%_Null% makecab.exe /F zzz.ddf /D Compress=OFF
|
||
|
echo.
|
||
|
echo Finished
|
||
|
echo.
|
||
|
goto :TheEnd
|
||
|
|
||
|
:DDCAB
|
||
|
echo.
|
||
|
echo Extracting: %_sSSU%
|
||
|
if exist "_tmpSSU\" rmdir /s /q "_tmpSSU\" %_Nul3%
|
||
|
mkdir "_tmpSSU\000"
|
||
|
expand.exe -f:* %_sSSU% _tmpSSU %_Null% || (
|
||
|
rmdir /s /q "_tmpSSU\" %_Nul3%
|
||
|
echo failed.
|
||
|
echo.
|
||
|
echo Provide ready DesktopDeployment.cab and try again
|
||
|
echo.
|
||
|
set fail=1
|
||
|
goto :eof
|
||
|
)
|
||
|
set xbt=%bit%
|
||
|
if /i %bit%==x64 set xbt=amd64
|
||
|
for /f %%# in ('dir /b /ad "_tmpSSU\%xbt%_microsoft-windows-servicingstack_*"') do set "src=%%#"
|
||
|
for %%# in (%sdl%) do if exist "_tmpSSU\%src%\%%#" (move /y "_tmpSSU\%src%\%%#" "_tmpSSU\000\%%#" %_Nul1%)
|
||
|
set DD64create=1
|
||
|
call :DDF %_sDDC%
|
||
|
call :ADD _tmpSSU\000
|
||
|
%_Null% makecab.exe /F zzz.ddf /D Compress=ON /D CompressionType=MSZIP
|
||
|
mkdir "_tmpSSU\111"
|
||
|
if /i not %bit%==x86 if not exist "DesktopDeployment_x86.cab" goto :DDCdu
|
||
|
rmdir /s /q "_tmpSSU\" %_Nul3%
|
||
|
exit /b
|
||
|
|
||
|
:DDC86
|
||
|
echo.
|
||
|
echo Extracting: %_sSSU%
|
||
|
if exist "_tmpSSU\" rmdir /s /q "_tmpSSU\" %_Nul3%
|
||
|
mkdir "_tmpSSU\111"
|
||
|
expand.exe -f:* %_sSSU% _tmpSSU %_Null% || (
|
||
|
rmdir /s /q "_tmpSSU\" %_Nul3%
|
||
|
echo failed.
|
||
|
echo.
|
||
|
echo Skipping DesktopDeployment_x86.cab
|
||
|
echo see ReadMe.txt for more details
|
||
|
goto :eof
|
||
|
)
|
||
|
:DDCdu
|
||
|
for /f %%# in ('dir /b /ad "_tmpSSU\x86_microsoft-windows-servicingstack_*"') do set "src=%%#"
|
||
|
for %%# in (%sdl%) do if exist "_tmpSSU\%src%\%%#" (move /y "_tmpSSU\%src%\%%#" "_tmpSSU\111\%%#" %_Nul1%)
|
||
|
set DD86create=1
|
||
|
call :DDF %_sDDD%
|
||
|
call :ADD _tmpSSU\111
|
||
|
%_Null% makecab.exe /F zzz.ddf /D Compress=ON /D CompressionType=MSZIP
|
||
|
rmdir /s /q "_tmpSSU\" %_Nul3%
|
||
|
exit /b
|
||
|
|
||
|
:DDF
|
||
|
echo.
|
||
|
echo Creating: %1
|
||
|
(echo .Set DiskDirectoryTemplate="."
|
||
|
echo .Set CabinetNameTemplate="%1"
|
||
|
echo .Set MaxCabinetSize=0
|
||
|
echo .Set MaxDiskSize=0
|
||
|
echo .Set FolderSizeThreshold=0
|
||
|
echo .Set RptFileName=nul
|
||
|
echo .Set InfFileName=nul
|
||
|
echo .Set Cabinet=ON
|
||
|
)>zzz.ddf
|
||
|
exit /b
|
||
|
|
||
|
:ADD
|
||
|
(echo .Set SourceDir="%1"
|
||
|
echo "dpx.dll"
|
||
|
echo "ReserveManager.dll"
|
||
|
echo "TurboStack.dll"
|
||
|
echo "UpdateAgent.dll"
|
||
|
echo "wcp.dll"
|
||
|
if exist "%1\UpdateCompression.dll" echo "UpdateCompression.dll"
|
||
|
)>>zzz.ddf
|
||
|
exit /b
|
||
|
|
||
|
:dodpx
|
||
|
set _nat=0
|
||
|
set _wow=0
|
||
|
if /i %bit%==%xOS% set _nat=1
|
||
|
if /i %bit%==x64 if /i %xOS%==amd64 set _nat=1
|
||
|
if %_nat% equ 0 set _wow=1
|
||
|
|
||
|
if exist "!_repo!\dpx.dll" if not exist "!_repo!\expand.exe" (
|
||
|
if %_wow% equ 1 copy /y %SystemRoot%\SysWOW64\expand.exe "!_repo!\" %_Nul3%
|
||
|
if %_nat% equ 1 copy /y %SysPath%\expand.exe "!_repo!\" %_Nul3%
|
||
|
set _exd=1
|
||
|
exit /b
|
||
|
)
|
||
|
if %_wow% equ 1 if exist "%_sDDD%" (
|
||
|
expand.exe -f:dpx.dll "%_sDDD%" "!_repo!" %_Nul3%
|
||
|
if exist "!_repo!\dpx.dll" (
|
||
|
copy /y %SystemRoot%\SysWOW64\expand.exe "!_repo!\" %_Nul3%
|
||
|
set _dpx=1
|
||
|
exit /b
|
||
|
)
|
||
|
)
|
||
|
if %_nat% equ 1 if defined _sDDC (
|
||
|
expand.exe -f:dpx.dll "%_sDDC%" "!_repo!" %_Nul3%
|
||
|
if exist "!_repo!\dpx.dll" (
|
||
|
copy /y %SysPath%\expand.exe "!_repo!\" %_Nul3%
|
||
|
set _dpx=1
|
||
|
exit /b
|
||
|
)
|
||
|
)
|
||
|
exit /b
|
||
|
|
||
|
:E_KB
|
||
|
echo.
|
||
|
echo %_err%
|
||
|
echo.
|
||
|
echo LCU %kbn% %xtn% file is missing
|
||
|
echo.
|
||
|
goto :TheEnd
|
||
|
|
||
|
:E_DB
|
||
|
echo.
|
||
|
echo %_err%
|
||
|
echo.
|
||
|
echo LCUCompDB file is missing from AggregatedMetadata
|
||
|
echo.
|
||
|
goto :TheEnd
|
||
|
|
||
|
:N_MS
|
||
|
echo.
|
||
|
echo %_ntc%
|
||
|
echo.
|
||
|
echo LCU %kbn% msu file already exist
|
||
|
echo.
|
||
|
goto :TheEnd
|
||
|
|
||
|
:N_PT
|
||
|
echo.
|
||
|
echo %_ntc%
|
||
|
echo.
|
||
|
echo Could not find all required update files
|
||
|
echo.
|
||
|
goto :TheEnd
|
||
|
|
||
|
:TheEnd
|
||
|
if exist "zzz.ddf" del /f /q "zzz.ddf"
|
||
|
if exist "LCUCompDB*.xml.cab" del /f /q "LCUCompDB*.xml.cab"
|
||
|
if exist "SSUCompDB*.xml.cab" del /f /q "SSUCompDB*.xml.cab"
|
||
|
if exist "%onf%" del /f /q "%onf%"
|
||
|
if %DD86create% equ 1 if exist "DesktopDeployment_x86.cab" del /f /q "DesktopDeployment_x86.cab"
|
||
|
if %DD64create% equ 1 if exist "DesktopDeployment.cab" del /f /q "DesktopDeployment.cab"
|
||
|
if %_exd% equ 1 (
|
||
|
if exist "expand.exe" del /f /q "expand.exe" %_Nul3%
|
||
|
)
|
||
|
if %_dpx% equ 1 (
|
||
|
if exist "dpx.dll" del /f /q "dpx.dll" %_Nul3%
|
||
|
if exist "expand.exe" del /f /q "expand.exe" %_Nul3%
|
||
|
)
|
||
|
%_Exit%
|
||
|
%_Pause%
|
||
|
goto :eof
|