mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2026-06-17 10:06:06 -05:00
9ef369bd45
Enhance build_msi_x64.bat to enumerate installed Windows Kits 10 SDK bin directories matching 10.* and select the newest x86 path that contains the MSI tools. Keep VC_DIR_PLATFORMSDK as the first override and preserve the existing fixed SDK fallback paths for older installations. Require MsiInfo.exe during discovery as well as msitran.exe and msidb.exe so the selected SDK path supports the final MSI metadata step.
197 lines
7.8 KiB
Batchfile
197 lines
7.8 KiB
Batchfile
::------------------------------------
|
|
::Define search paths here for Wix ToolSet and SDK (and SignTool optionnally)
|
|
::------------------------------------
|
|
|
|
@set SEARCH_WIX_PATH=C:\Program Files (x86)\WiX Toolset v3.14\bin
|
|
|
|
@set SEARCH_WINDOWS_KITS_10_BIN=C:\Program Files (x86)\Windows Kits\10\bin
|
|
@set SEARCH_VC_DIR_PLATFORMSDK_1=C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86
|
|
@set SEARCH_VC_DIR_PLATFORMSDK_2=C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86
|
|
@set SEARCH_VC_DIR_PLATFORMSDK_3=C:\Program Files (x86)\Windows Kits\10\bin\10.0.17134.0\x86
|
|
@set SEARCH_VC_DIR_PLATFORMSDK_4=C:\Program Files (x86)\Windows Kits\10\bin\x86
|
|
@set SEARCH_VC_DIR_PLATFORMSDK_5=C:\Program Files\Microsoft Platform SDK\bin
|
|
@set SEARCH_VC_DIR_PLATFORMSDK_6=C:\Program Files (x86)\Windows Kits\8.1\bin\x86
|
|
@set SEARCH_VC_DIR_PLATFORMSDK_7=C:\Program Files (x86)\Windows Kits\8.0\bin\x86
|
|
@set SEARCH_VC_DIR_PLATFORMSDK_8=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\bin
|
|
|
|
::end of search paths
|
|
|
|
set MSI_BUILDPATH=%~dp0
|
|
cd %MSI_BUILDPATH%
|
|
|
|
::------------------------------------
|
|
:: Look for MSI SDK tools
|
|
::------------------------------------
|
|
|
|
@echo [INFO] Define default value for VC_DIR_PLATFORMSDK if not defined yet
|
|
@echo [INFO] Input VC_DIR_PLATFORMSDK=%VC_DIR_PLATFORMSDK%
|
|
@set FILE_TO_FIND="msitran.exe" "msidb.exe" "MsiInfo.exe"
|
|
@echo [INFO] Looking for files: %FILE_TO_FIND%
|
|
|
|
@set FILE_NOT_FOUND=
|
|
@for %%i in (%FILE_TO_FIND%) do @if not exist "%VC_DIR_PLATFORMSDK%\%%~i" set FILE_NOT_FOUND=%%~i
|
|
@if "%FILE_NOT_FOUND%"=="" goto found_mssdk
|
|
@echo Not found in "%VC_DIR_PLATFORMSDK%"
|
|
|
|
@echo [INFO] Looking for Windows 10 SDK MSI tools under "%SEARCH_WINDOWS_KITS_10_BIN%"
|
|
@for /f "delims=" %%d in ('dir /b /ad /o-n "%SEARCH_WINDOWS_KITS_10_BIN%\10.*" 2^>nul') do (
|
|
@call :check_mssdk_path "%SEARCH_WINDOWS_KITS_10_BIN%\%%d\x86"
|
|
@if not errorlevel 1 goto found_mssdk
|
|
)
|
|
|
|
@set VC_DIR_PLATFORMSDK=%SEARCH_VC_DIR_PLATFORMSDK_1%
|
|
@set FILE_NOT_FOUND=
|
|
@for %%i in (%FILE_TO_FIND%) do @if not exist "%VC_DIR_PLATFORMSDK%\%%~i" set FILE_NOT_FOUND=%%~i
|
|
@if "%FILE_NOT_FOUND%"=="" goto found_mssdk
|
|
@echo Not found in "%VC_DIR_PLATFORMSDK%"
|
|
|
|
@set VC_DIR_PLATFORMSDK=%SEARCH_VC_DIR_PLATFORMSDK_2%
|
|
@set FILE_NOT_FOUND=
|
|
@for %%i in (%FILE_TO_FIND%) do @if not exist "%VC_DIR_PLATFORMSDK%\%%~i" set FILE_NOT_FOUND=%%~i
|
|
@if "%FILE_NOT_FOUND%"=="" goto found_mssdk
|
|
@echo Not found in "%VC_DIR_PLATFORMSDK%"
|
|
|
|
@set VC_DIR_PLATFORMSDK=%SEARCH_VC_DIR_PLATFORMSDK_3%
|
|
@set FILE_NOT_FOUND=
|
|
@for %%i in (%FILE_TO_FIND%) do @if not exist "%VC_DIR_PLATFORMSDK%\%%~i" set FILE_NOT_FOUND=%%~i
|
|
@if "%FILE_NOT_FOUND%"=="" goto found_mssdk
|
|
@echo Not found in "%VC_DIR_PLATFORMSDK%"
|
|
|
|
@rem paths for Windows 8 SDK are slightly different
|
|
@set FILE_TO_FIND="msitran.exe" "msidb.exe" "MsiInfo.exe"
|
|
|
|
@set VC_DIR_PLATFORMSDK=%SEARCH_VC_DIR_PLATFORMSDK_4%
|
|
@set FILE_NOT_FOUND=
|
|
@for %%i in (%FILE_TO_FIND%) do @if not exist "%VC_DIR_PLATFORMSDK%\%%~i" set FILE_NOT_FOUND=%%~i
|
|
@if "%FILE_NOT_FOUND%"=="" goto found_mssdk
|
|
@echo Not found in "%VC_DIR_PLATFORMSDK%"
|
|
|
|
@set VC_DIR_PLATFORMSDK=%SEARCH_VC_DIR_PLATFORMSDK_5%
|
|
@set FILE_NOT_FOUND=
|
|
@for %%i in (%FILE_TO_FIND%) do @if not exist "%VC_DIR_PLATFORMSDK%\%%~i" set FILE_NOT_FOUND=%%~i
|
|
@if "%FILE_NOT_FOUND%"=="" goto found_mssdk
|
|
@echo Not found in "%VC_DIR_PLATFORMSDK%"
|
|
|
|
@set VC_DIR_PLATFORMSDK=%SEARCH_VC_DIR_PLATFORMSDK_6%
|
|
@set FILE_NOT_FOUND=
|
|
@for %%i in (%FILE_TO_FIND%) do @if not exist "%VC_DIR_PLATFORMSDK%\%%~i" set FILE_NOT_FOUND=%%~i
|
|
@if "%FILE_NOT_FOUND%"=="" goto found_mssdk
|
|
@echo Not found in "%VC_DIR_PLATFORMSDK%"
|
|
|
|
@echo [ERROR] MS Platform SDK 2008, Windows SDK v7.1, or Windows SDK 8.0/8.1/10 could not be found
|
|
@echo If the path is not any of the above,
|
|
@echo please define VC_DIR_PLATFORMSDK environment variable.
|
|
@exit /B 1
|
|
|
|
:found_mssdk
|
|
@echo Found in "%VC_DIR_PLATFORMSDK%"
|
|
|
|
::------------------------------------
|
|
:: Look for candle.exe (and light.exe obviously)
|
|
::------------------------------------
|
|
|
|
@echo [INFO] Check if WiX is installed
|
|
@echo [INFO] Default value for VC_DIR_WIX is set to %WIX%
|
|
@set VC_DIR_WIX=%WIX%
|
|
@set FILE_TO_FIND="candle.exe"
|
|
@echo [INFO] Looking for files: %FILE_TO_FIND%
|
|
|
|
@set FILE_NOT_FOUND=
|
|
@for %%i in (%FILE_TO_FIND%) do @if not exist "%VC_DIR_WIX%\%%~i" set FILE_NOT_FOUND=%%~i
|
|
@if "%FILE_NOT_FOUND%"=="" goto found_wix
|
|
@echo Not found in "%VC_DIR_WIX%"
|
|
|
|
@set VC_DIR_WIX=%SEARCH_WIX_PATH%
|
|
@set FILE_NOT_FOUND=
|
|
@for %%i in (%FILE_TO_FIND%) do @if not exist "%VC_DIR_WIX%\%%~i" set FILE_NOT_FOUND=%%~i
|
|
@if "%FILE_NOT_FOUND%"=="" goto found_wix
|
|
@echo Not found in "%VC_DIR_WIX%"
|
|
|
|
@echo [ERROR] WiX could not be found
|
|
@echo Please install Wix3
|
|
@exit /B 1
|
|
|
|
:found_wix
|
|
@echo Found in "%VC_DIR_WIX%"
|
|
|
|
::------------------------------------
|
|
:: Create a MSI installer for each language
|
|
:: We make use of -sice:ICE09 to silence ICE09 warnings generated because we install non-permanent elements to 'SystemFolder'
|
|
::------------------------------------
|
|
@echo [INFO] Creating msi 64-bit installers
|
|
|
|
@echo [INFO] Making the en-us version in %cd%\out\64\en-us\
|
|
"%VC_DIR_WIX%\candle.exe" -dLang=en -arch x64 -ext WixUIExtension -ext WiXUtilExtension Product64.wxs -out out\64\en-us\Product.wixobj
|
|
@if NOT "%ERRORLEVEL%" == "0" goto msi_failed
|
|
"%VC_DIR_WIX%\candle.exe" -dLang=en -arch x64 -ext WixUIExtension -ext WiXUtilExtension Custom_InstallDir.wxs -out out\64\en-us\Custom_InstallDir.wixobj
|
|
@if NOT "%ERRORLEVEL%" == "0" goto msi_failed
|
|
"%VC_DIR_WIX%\candle.exe" -dLang=en -arch x64 -ext WixUIExtension -ext WiXUtilExtension Custom_InstallDirDlg.wxs -out out\64\en-us\Custom_InstallDirDlg.wixobj
|
|
@if NOT "%ERRORLEVEL%" == "0" goto msi_failed
|
|
"%VC_DIR_WIX%\Light.exe" -ext WixUIExtension -ext WiXUtilExtension -cultures:en-us -loc Strings-en.wxl out\64\en-us\Product.wixobj out\64\en-us\Custom_InstallDirDlg.wixobj out\64\en-us\Custom_InstallDir.wixobj -out out\64\en-us\VeraCrypt_Setup_%1_en-us.msi -pdbout out\64\en-us\VeraCrypt_Setup_%1_en-us.wixpdb -sice:ICE09
|
|
@if NOT "%ERRORLEVEL%" == "0" goto msi_failed
|
|
|
|
::------------------------------------
|
|
:: Join the language specific MSIs together
|
|
::------------------------------------
|
|
@echo [INFO] Joining msi 64-bit installers into 1 64-bit installer
|
|
|
|
@set OUT_PATH=%cd%\out\64\
|
|
@echo [INFO] OUT_PATH=%OUT_PATH%
|
|
|
|
@set MSI_FILE_IN=VeraCrypt_Setup_%1
|
|
@set MSI_FILE_OUT=VeraCrypt_Setup_x64_%1
|
|
|
|
:: Check if all the MSI files were built
|
|
@set LANG=en-us
|
|
@IF NOT EXIST "%OUT_PATH%\%LANG%\%MSI_FILE_IN%_%LANG%.msi" goto NOT_%LANG%
|
|
|
|
:: Take all the MSI files and process
|
|
@set LANG=en-us
|
|
@copy /Y "%OUT_PATH%\%LANG%\%MSI_FILE_IN%_%LANG%.msi" "%OUT_PATH%\%MSI_FILE_OUT%.msi"
|
|
|
|
::------------------------------------
|
|
:: Add all available LCIDs
|
|
::------------------------------------
|
|
"%VC_DIR_PLATFORMSDK%\MsiInfo.Exe" "%OUT_PATH%\%MSI_FILE_OUT%.msi" /p x64;1033
|
|
@if NOT "%ERRORLEVEL%" == "0" goto comb_msi_failed
|
|
|
|
::------------------------------------
|
|
:: Copy to bin and remove out
|
|
::------------------------------------
|
|
mkdir bin
|
|
@copy /Y "%OUT_PATH%\%MSI_FILE_OUT%.msi" "%cd%\bin\%MSI_FILE_OUT%.msi"
|
|
@set LANG=en-us
|
|
@copy /Y "%OUT_PATH%\%LANG%\%MSI_FILE_IN%_%LANG%.msi" "%cd%\bin\%MSI_FILE_OUT%_%LANG%.msi"
|
|
@rmdir /S /Q "%cd%\out"
|
|
|
|
goto END
|
|
|
|
:msi_failed
|
|
@echo [ERR ] failed to create the MSI
|
|
@exit /B 1
|
|
|
|
:comb_msi_failed
|
|
@echo [ERR ] failed to combine the language specific MSI's
|
|
@exit /B 1
|
|
|
|
:NOT_en-us
|
|
@echo [ERR ] Missing file '%OUT_PATH%\%LANG%\%MSI_FILE_IN%_%LANG%.msi'
|
|
@exit /B 1
|
|
|
|
:NOT_lv-lv
|
|
@echo [ERR ] Missing file '%OUT_PATH%\%LANG%\%MSI_FILE_IN%_%LANG%.msi'
|
|
@exit /B 1
|
|
|
|
@echo [INFO] Done creating multi-lang msi installers
|
|
:END
|
|
@echo end
|
|
@exit /B 0
|
|
|
|
:check_mssdk_path
|
|
@set VC_DIR_PLATFORMSDK=%~1
|
|
@set FILE_NOT_FOUND=
|
|
@for %%i in (%FILE_TO_FIND%) do @if not exist "%VC_DIR_PLATFORMSDK%\%%~i" set FILE_NOT_FOUND=%%~i
|
|
@if "%FILE_NOT_FOUND%"=="" exit /B 0
|
|
@echo Not found in "%VC_DIR_PLATFORMSDK%"
|
|
@exit /B 1
|