@ -51,11 +51,23 @@ STORED_ENUM_MAP(stored_log_mode, header::AppendLog,
header : : OverwriteLog
) ;
STORED_ENUM_MAP ( stored_light_control_styling , header : : All ,
header : : All ,
header : : AllButButtons ,
header : : OnlyRequired
) ;
STORED_ENUM_MAP ( stored_setup_style , header : : ClassicStyle ,
header : : ClassicStyle ,
header : : ModernStyle
) ;
STORED_ENUM_MAP ( stored_setup_dark_style , header : : LightStyle ,
header : : LightStyle ,
header : : DarkStyle ,
header : : DynamicStyle
) ;
STORED_ENUM_MAP ( stored_bool_auto_no_yes , header : : Auto ,
header : : Auto ,
header : : No ,
@ -266,6 +278,30 @@ void header::load(std::istream & is, const version & version) {
is > > util : : binary_string ( architectures_allowed_expr ) ;
is > > util : : binary_string ( architectures_installed_in_64bit_mode_expr ) ;
}
if ( version > = INNO_VERSION ( 6 , 4 , 2 ) ) {
is > > util : : binary_string ( close_applications_filter_excludes ) ;
} else {
close_applications_filter_excludes . clear ( ) ;
}
if ( version > = INNO_VERSION ( 6 , 5 , 0 ) ) {
is > > util : : binary_string ( seven_zip_library_name ) ;
} else {
seven_zip_library_name . clear ( ) ;
}
if ( version > = INNO_VERSION ( 6 , 7 , 0 ) ) {
std : : string tmp ;
is > > util : : binary_string ( use_previous_app_dir ) ;
is > > util : : binary_string ( use_previous_group ) ;
is > > util : : binary_string ( use_previous_setup_type ) ;
is > > util : : binary_string ( use_previous_tasks ) ;
is > > util : : binary_string ( use_previous_user_info ) ;
} else {
use_previous_app_dir . clear ( ) ;
use_previous_group . clear ( ) ;
use_previous_setup_type . clear ( ) ;
use_previous_tasks . clear ( ) ;
use_previous_user_info . clear ( ) ;
}
if ( version > = INNO_VERSION ( 5 , 2 , 5 ) ) {
is > > util : : ansi_string ( license_text ) ;
is > > util : : ansi_string ( info_before ) ;
@ -319,6 +355,11 @@ void header::load(std::istream & is, const version & version) {
}
directory_count = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
if ( version > = INNO_VERSION ( 6 , 5 , 0 ) ) {
issig_key_count = util : : load < boost : : uint32_t > ( is ) ;
} else {
issig_key_count = 0 ;
}
file_count = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
data_entry_count = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
icon_count = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
@ -350,6 +391,7 @@ void header::load(std::istream & is, const version & version) {
} else {
back_color2 = 0 ;
}
// added again in 6.6, see below
if ( version < INNO_VERSION ( 5 , 5 , 7 ) ) {
image_back_color = util : : load < boost : : uint32_t > ( is ) ;
} else {
@ -361,10 +403,14 @@ void header::load(std::istream & is, const version & version) {
small_image_back_color = 0 ;
}
if ( version > = INNO_VERSION ( 6 , 0 , 0 ) ) {
if ( version > = INNO_VERSION ( 6 , 6 , 0 ) ) {
wizard_resize_percent_x = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
wizard_resize_percent_y = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
wizard_dark_style = stored_enum < stored_setup_dark_style > ( is ) . get ( ) ;
} else if ( version > = INNO_VERSION ( 6 , 0 , 0 ) ) {
wizard_style = stored_enum < stored_setup_style > ( is ) . get ( ) ;
wizard_resize_percent_x = util : : load < boost : : uint32_t > ( is ) ;
wizard_resize_percent_y = util : : load < boost : : uint32_t > ( is ) ;
wizard_resize_percent_x = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
wizard_resize_percent_y = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
} else {
wizard_style = ClassicStyle ;
wizard_resize_percent_x = 0 ;
@ -376,8 +422,28 @@ void header::load(std::istream & is, const version & version) {
} else {
image_alpha_format = AlphaIgnored ;
}
if ( version > = INNO_VERSION ( 6 , 4 , 0 ) ) {
if ( version > = INNO_VERSION ( 6 , 7 , 0 ) ) {
image_back_color = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
small_image_back_color = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
back_color = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
image_back_color2 = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
small_image_back_color2 = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
back_color2 = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
image_opacity = util : : load < boost : : uint8_t > ( is , version . bits ( ) ) ;
back_image_opacity = util : : load < boost : : uint8_t > ( is , version . bits ( ) ) ;
wizard_light_control_styling = stored_enum < stored_light_control_styling > ( is ) . get ( ) ;
} else if ( version > = INNO_VERSION ( 6 , 6 , 0 ) ) {
image_back_color = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
small_image_back_color = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
image_back_color2 = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
small_image_back_color2 = util : : load < boost : : uint32_t > ( is , version . bits ( ) ) ;
}
if ( version > = INNO_VERSION ( 6 , 5 , 0 ) ) {
// moved to encryption header (read in setup::info::load)
password . type = crypto : : PBKDF2_SHA256_XChaCha20 ;
} else if ( version > = INNO_VERSION ( 6 , 4 , 0 ) ) {
is . read ( password . sha256 , 4 ) ;
password . type = crypto : : PBKDF2_SHA256_XChaCha20 ;
} else if ( version > = INNO_VERSION ( 5 , 3 , 9 ) ) {
@ -390,7 +456,9 @@ void header::load(std::istream & is, const version & version) {
password . crc32 = util : : load < boost : : uint32_t > ( is ) ;
password . type = crypto : : CRC32 ;
}
if ( version > = INNO_VERSION ( 6 , 4 , 0 ) ) {
if ( version > = INNO_VERSION ( 6 , 5 , 0 ) ) {
// moved to encryption header (read in setup::info::load)
} else if ( version > = INNO_VERSION ( 6 , 4 , 0 ) ) {
password_salt . resize ( 44 ) ; // PBKDF2 salt + iteration count + ChaCha2 base nonce
is . read ( & password_salt [ 0 ] , std : : streamsize ( password_salt . length ( ) ) ) ;
} else if ( version > = INNO_VERSION ( 4 , 2 , 2 ) ) {
@ -527,6 +595,12 @@ void header::load(std::istream & is, const version & version) {
}
options | = load_flags ( is , version ) ;
if ( version > = INNO_VERSION ( 6 , 7 , 0 ) ) {
// Inno forces the TSetupHeaderOption enum to be 8 bytes,
// but currently only contains 6 bytes of values
( void ) util : : load < boost : : uint8_t > ( is ) ;
( void ) util : : load < boost : : uint8_t > ( is ) ;
}
if ( version < INNO_VERSION ( 3 , 0 , 4 ) ) {
privileges_required = ( options & AdminPrivilegesRequired ) ? AdminPriviliges : NoPrivileges ;
@ -626,19 +700,20 @@ header::flags header::load_flags(std::istream & is, const version & version) {
if ( version > = INNO_VERSION ( 1 , 3 , 0 ) & & version < INNO_VERSION ( 5 , 3 , 8 ) ) {
flagreader . add ( CreateUninstallRegKey ) ;
}
if ( version > = INNO_VERSION ( 1 , 3 , 1 ) ) {
if ( version > = INNO_VERSION ( 1 , 3 , 1 ) & & version < INNO_VERSION ( 6 , 7 , 0 ) ) {
flagreader . add ( UsePreviousAppDir ) ;
}
if ( version > = INNO_VERSION ( 1 , 3 , 3 ) & & version < INNO_VERSION_EXT ( 6 , 4 , 0 , 1 ) ) {
flagreader . add ( BackColorHorizontal ) ;
}
if ( version > = INNO_VERSION ( 1 , 3 , 10 ) ) {
if ( version > = INNO_VERSION ( 1 , 3 , 10 ) & & version < INNO_VERSION ( 6 , 7 , 0 ) ) {
flagreader . add ( UsePreviousGroup ) ;
}
if ( version > = INNO_VERSION ( 1 , 3 , 20 ) ) {
flagreader . add ( UpdateUninstallLogAppName ) ;
}
if ( version > = INNO_VERSION ( 2 , 0 , 0 ) | | ( version . is_isx ( ) & & version > = INNO_VERSION ( 1 , 3 , 10 ) ) ) {
if ( ( version > = INNO_VERSION ( 2 , 0 , 0 ) | | ( version . is_isx ( ) & & version > = INNO_VERSION ( 1 , 3 , 10 ) ) )
& & version < INNO_VERSION ( 6 , 7 , 0 ) ) {
flagreader . add ( UsePreviousSetupType ) ;
}
if ( version > = INNO_VERSION ( 2 , 0 , 0 ) ) {
@ -646,7 +721,9 @@ header::flags header::load_flags(std::istream & is, const version & version) {
flagreader . add ( AlwaysShowComponentsList ) ;
flagreader . add ( FlatComponentsList ) ;
flagreader . add ( ShowComponentSizes ) ;
flagreader . add ( UsePreviousTasks ) ;
if ( version < INNO_VERSION ( 6 , 7 , 0 ) ) {
flagreader . add ( UsePreviousTasks ) ;
}
flagreader . add ( DisableReadyPage ) ;
}
if ( version > = INNO_VERSION ( 2 , 0 , 7 ) ) {
@ -661,7 +738,9 @@ header::flags header::load_flags(std::istream & is, const version & version) {
}
if ( version > = INNO_VERSION ( 3 , 0 , 0 ) ) {
flagreader . add ( UserInfoPage ) ;
flagreader . add ( UsePreviousUserInfo ) ;
if ( version < INNO_VERSION ( 6 , 7 , 0 ) ) {
flagreader . add ( UsePreviousUserInfo ) ;
}
}
if ( version > = INNO_VERSION ( 3 , 0 , 1 ) ) {
flagreader . add ( UninstallRestartComputer ) ;
@ -690,7 +769,7 @@ header::flags header::load_flags(std::istream & is, const version & version) {
flagreader . add ( AppendDefaultDirName ) ;
flagreader . add ( AppendDefaultGroupName ) ;
}
if ( version > = INNO_VERSION ( 4 , 2 , 2 ) ) {
if ( version > = INNO_VERSION ( 4 , 2 , 2 ) & & version < INNO_VERSION ( 6 , 5 , 0 ) ) {
flagreader . add ( EncryptionUsed ) ;
}
if ( version > = INNO_VERSION ( 5 , 0 , 4 ) & & version < INNO_VERSION ( 5 , 6 , 1 ) ) {
@ -724,11 +803,27 @@ header::flags header::load_flags(std::istream & is, const version & version) {
if ( version > = INNO_VERSION ( 6 , 0 , 0 ) ) {
flagreader . add ( AppNameHasConsts ) ;
flagreader . add ( UsePreviousPrivileges ) ;
}
if ( version > = INNO_VERSION ( 6 , 0 , 0 ) & & version < INNO_VERSION ( 6 , 6 , 0 ) ) {
flagreader . add ( WizardResizable ) ;
}
if ( version > = INNO_VERSION ( 6 , 3 , 0 ) ) {
flagreader . add ( UninstallLogging ) ;
}
if ( version > = INNO_VERSION ( 6 , 6 , 0 ) ) {
flagreader . add ( WizardModern ) ;
flagreader . add ( WizardBorderStyled ) ;
flagreader . add ( WizardKeepAspectRatio ) ;
}
if ( version > = INNO_VERSION ( 6 , 6 , 0 ) & & version < INNO_VERSION ( 6 , 7 , 0 ) ) {
flagreader . add ( WizardLightButtonsUnstyled ) ;
}
if ( version > = INNO_VERSION ( 6 , 7 , 0 ) ) {
flagreader . add ( RedirectionGuard ) ;
flagreader . add ( WizardBevelsHidden ) ;
}
return flagreader . finalize ( ) ;
}
@ -762,6 +857,8 @@ void header::decode(util::codepage_id codepage) {
util : : to_utf8 ( create_uninstall_registry_key , codepage , & lead_bytes ) ;
util : : to_utf8 ( uninstallable , codepage ) ;
util : : to_utf8 ( close_applications_filter , codepage ) ;
util : : to_utf8 ( close_applications_filter_excludes , codepage ) ;
util : : to_utf8 ( seven_zip_library_name , codepage ) ;
util : : to_utf8 ( setup_mutex , codepage , & lead_bytes ) ;
util : : to_utf8 ( changes_environment , codepage ) ;
util : : to_utf8 ( changes_associations , codepage ) ;
@ -808,7 +905,6 @@ NAMES(setup::header::flags, "Setup Option",
" wizard image stretch " ,
" append default dir name " ,
" append default group name " ,
" encrypted " ,
" changes environment " ,
" show undisplayable languages " ,
" setup logging " ,
@ -821,8 +917,13 @@ NAMES(setup::header::flags, "Setup Option",
" force close applications " ,
" app name_has_consts " ,
" use_previous_privileges " ,
" wizard_resizable " ,
" uninstall_logging " ,
" wizard_modern " ,
" wizard_border_styled " ,
" wizard_keep_aspect_ratio " ,
" redirection_guard " ,
" wizard_bevels_hidden " ,
" uninstallable " ,
" disable dir page " ,
" disable program group page " ,
@ -836,6 +937,9 @@ NAMES(setup::header::flags, "Setup Option",
" disable dir exists warning " ,
" back solid " ,
" overwrite uninst reg entries " ,
" encrypted " ,
" wizard_light_buttons_unstyled " ,
" wizard_resizable " ,
)
NAMES ( setup : : header : : architecture_types , " Architecture " ,
@ -870,11 +974,23 @@ NAMES(setup::header::log_mode, "Uninstall Log Mode",
" overwrite " ,
)
NAMES ( setup : : header : : light_control_styling , " Light Control Styling " ,
" all " ,
" all but buttons " ,
" only required " ,
)
NAMES ( setup : : header : : style , " Style " ,
" classic " ,
" modern " ,
)
NAMES ( setup : : header : : dark_style , " DarkStyle " ,
" light " ,
" dark " ,
" dynamic " ,
)
NAMES ( setup : : header : : auto_bool , " Auto Boolean " ,
" auto " ,
" no " ,