Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

# innoextract - A tool to unpack installers created by Inno Setup

[Inno Setup](https://jrsoftware.org/isinfo.php) is a tool to create installers for Microsoft Windows applications. innoextract allows to extract such installers under non-Windows systems without running the actual installer using wine. innoextract currently supports installers created by Inno Setup 1.2.10 to 6.3.3.
[Inno Setup](https://jrsoftware.org/isinfo.php) is a tool to create installers for Microsoft Windows applications. innoextract allows to extract such installers under non-Windows systems without running the actual installer using wine. innoextract currently supports installers created by Inno Setup 1.2.10 to 6.4.3.

In addition to standard Inno Setup installers, innoextract also supports some modified Inno Setup variants including Martijn Laan's My Inno Setup Extensions 1.3.10 to 3.0.6.1 as well as GOG.com's Inno Setup-based game installers. innoextract is able to unpack Wadjet Eye Games installers (to play with AGS), Arx Fatalis patches (for use with Arx Libertatis) as well as various other Inno Setup executables.

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
innoextract 1.10-dev

Known working Inno Setup versions:
Inno Setup 1.2.10 to 6.3.3
Inno Setup 1.2.10 to 6.4.3

Bug tracker:
https://innoextract.constexpr.org/issues
12 changes: 7 additions & 5 deletions src/setup/data.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,20 +136,22 @@ void data_entry::load(std::istream & is, const info & i) {
stored_flag_reader<flags> flagreader(is, i.version.bits());

flagreader.add(VersionInfoValid);
flagreader.add(VersionInfoNotValid);
if(i.version < INNO_VERSION(6, 4, 3)) {
flagreader.add(VersionInfoNotValid);
}
if(i.version >= INNO_VERSION(2, 0, 17) && i.version < INNO_VERSION(4, 0, 1)) {
flagreader.add(BZipped);
}
if(i.version >= INNO_VERSION(4, 0, 10)) {
flagreader.add(TimeStampInUTC);
}
if(i.version >= INNO_VERSION(4, 1, 0)) {
if(i.version >= INNO_VERSION(4, 1, 0) && i.version < INNO_VERSION(6, 4, 3)) {
flagreader.add(IsUninstallerExe);
}
if(i.version >= INNO_VERSION(4, 1, 8)) {
flagreader.add(CallInstructionOptimized);
}
if(i.version >= INNO_VERSION(4, 2, 0)) {
if(i.version >= INNO_VERSION(4, 2, 0) && i.version < INNO_VERSION(6, 4, 3)) {
flagreader.add(Touch);
}
if(i.version >= INNO_VERSION(4, 2, 2)) {
Expand All @@ -160,7 +162,7 @@ void data_entry::load(std::istream & is, const info & i) {
} else {
options |= ChunkCompressed;
}
if(i.version >= INNO_VERSION(5, 1, 13)) {
if(i.version >= INNO_VERSION(5, 1, 13) && i.version < INNO_VERSION(6, 4, 3)) {
flagreader.add(SolidBreak);
}
if(i.version >= INNO_VERSION(5, 5, 7) && i.version < INNO_VERSION(6, 3, 0)) {
Expand All @@ -171,7 +173,7 @@ void data_entry::load(std::istream & is, const info & i) {

options |= flagreader.finalize();

if(i.version >= INNO_VERSION(6, 3, 0)) {
if(i.version >= INNO_VERSION(6, 3, 0) && i.version < INNO_VERSION(6, 4, 3)) {
sign = stored_enum<stored_sign_mode>(is).get();
} else if(options & SignOnce) {
sign = Once;
Expand Down
6 changes: 6 additions & 0 deletions src/setup/header.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,11 @@ 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(5, 2, 5)) {
is >> util::ansi_string(license_text);
is >> util::ansi_string(info_before);
Expand Down Expand Up @@ -765,6 +770,7 @@ void header::decode(util::codepage_id codepage) {
util::to_utf8(setup_mutex, codepage, &lead_bytes);
util::to_utf8(changes_environment, codepage);
util::to_utf8(changes_associations, codepage);
util::to_utf8(close_applications_filter_excludes, codepage);

}

Expand Down
1 change: 1 addition & 0 deletions src/setup/header.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ struct header {
std::string changes_associations;
std::string architectures_allowed_expr;
std::string architectures_installed_in_64bit_mode_expr;
std::string close_applications_filter_excludes;
std::string license_text;
std::string info_before;
std::string info_after;
Expand Down
2 changes: 2 additions & 0 deletions src/setup/version.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,8 @@ const known_version versions[] = {
{ "Inno Setup Setup Data (6.3.0)", INNO_VERSION_EXT(6, 3, 0, 0), version::Unicode },
{ "Inno Setup Setup Data (6.4.0)", /* prerelease */ INNO_VERSION_EXT(6, 4, 0, 0), version::Unicode },
{ "Inno Setup Setup Data (6.4.0.1)", /* 6.4.0 */ INNO_VERSION_EXT(6, 4, 0, 1), version::Unicode },
{ "Inno Setup Setup Data (6.4.2)", INNO_VERSION_EXT(6, 4, 2, 0), version::Unicode },
{ "Inno Setup Setup Data (6.4.3)", INNO_VERSION_EXT(6, 4, 3, 0), version::Unicode },
};

} // anonymous namespace
Expand Down