SYNOPSIS

DESCRIPTION

innoextract is a tool that can extract installer executables created by Inno Setup.

innoextract will extract files from installers specified on the command line.

To extract a multi-part installer with external data files, only the executable (.exe) file needs to be given as an argument to innoextract.

OPTIONS SUMMARY

Here is a short summary of the options available in innoextract. Please refer to the detailed documentation below for a complete description.

Generic options:

-h

--help

Show supported options

-v

--version

Print the version information

--license

Show license information

Actions:

-t

--test

Only verify checksums, don't write anything

-e

--extract

Extract files (default action)

-l

--list

Only list files, don't write anything

--list-languages

List languages supported by the installer

1.5+

--gog-game-id

Determine the GOG.com game ID for this installer

1.5+

Modifiers:

--collisions ACTION

How to handle duplicate files

1.5+

--default-language

Default language for renaming

1.5+

--dump

Dump contents without converting filenames

-L

--lowercase

Convert extracted filenames to lower-case

-t

--timestamps TZ

Timezone for file times or "local" or "none"

1.4+

-d

--output-dir DIR

Extract files into the given directory

1.4+

-g

--gog

Process additional archives from GOG.com installers

1.5+

Filters:

-m

--exclude-temp

Don't extract temporary files

1.5+

--language LANG

Extract files for the given language

--language-only

Only extract language-specific files

1.5+

-I

--include EXPR

Extract only files that match this path

1.5+

Display options:

-q

--quiet

Output less information

-s

--silent

Output only error/warning information

--no-warn-unused

Don't warn on unused .bin files

1.5+

-c

--color[=ENABLE]

Enable/disable color output

-p

--progress[=ENABLE]

Enable/disable the progress bar

OPTIONS

--

Treat all arguments after this one as files, even if they begin with a dash.

--collisionsACTION

1.5+: Inno Setup installers can contain duplicate files with the same name. This option tells innoextract what to do when such a collisions is encountered. Valid actions are:

"overwrite"

Extract only one of the colliding files. The choice is done similar to how Inno Setup overwrites files during installation. This is the default.

"rename"

Rename files that would be overwritten using the "overwrite" action by appending a suffix comprised of the file's language, the component it belongs to and/or a number to make the filename unique. The language suffix (if applicable) is also appended to the default file that would have been extracted with the "overwrite" action.

1.5: The suffix is omitted for the first file that is store first in the setup headers rather than the file that would be extracted with "overwrite". Further, the language suffix is not added to the first file if the files in the collision set belong to different components.

"rename-all"

1.6+: Rename all colliding files by appending a suffix comprised of the file's language, the component it belongs to and/or a number to make the filename unique. The complete suffix is appended to both files that would have been overwritten using the "overwrite" action and to those that would have overwritten other files.

"error"

Exit when a collision is detected.

Rename rules:

If the component is not the same for all files in the collision set (all files with the same filename), "#" (without quotes) followed by the component id is appended to all files that are specific to a single component.

If the language is not the same for all files in the collision set, "@" (without quotes) followed by the language id is appended to all files that are specific to a single component unless that language matches the default language specified by the --default-language. While the suffix is omitted for the default language, no numbered suffix is added in it's place unless needed to make the filename unique.

If no suffix was added by the previous steps, or if the filename is not yet unique, "$" (without quotes) followed by the lowest integer (starting at 0) to make the filename unique is appended.

With the "rename" action, steps 1 and 3 are only applied to files that would have been overwritten by the "overwrite" action.1.6+: The "rename-all" action applies the three rules to all files in the collision set.

--default-languageLANG

1.5+: Set a language as the default.

With --collisions=overwrite (the default) this will change the choice of which file to keep to always prefer the given language. In effect, --default-language behaves almost like --language, except that files are extracted for all languages if they have different names.

When using the --collisions=rename option, --default-language chooses a language for which the files should keep the original name if possible.

-c, --color[=ENABLE]

By default innoextract will try to detect if the terminal supports shell escape codes and enable or disable color output accordingly. Specifically, colors will be enabled if both stdout and stderr point to a TTY and (for 1.5+) the TERM environment variable is not set to "dumb". Pass 1 or true to --color to force color output. Pass 0 or false to never output color codes.

When combining --dump with --extract innoextract will not ensure that the paths don't point outside the destination directory. Use this option with caution when handling untrusted files.

-m, --exclude-temp

1.5+: Don't extract files that would have been deleted at the end of the install process. Such files are marked with [temp] in the file listing.

This option takes precedence over --include and --language: temporary files are never extracted when using the --exclude-temp, even if they match the selected language or include expressions.

-e, --extract

This action is enabled by default, unless either --list or --extract is specified.

1.0-1.3: You may only specify one of --extract, --list and --test.

1.4+: You may only specify one of --extract and --test.

-g, --gog

1.5+: Try to process additional .bin files that have the same basename as the setup but are not actually part of the Inno Setup installer. This is the case for newer multi-part GOG.com installers where these .bin files are RAR archives, potential encrypted with the MD5 checksum of the game ID (see the --gog-game-id option).

Extracting these RAR archives requires rar, unrar or lsar/unar command-line utilities to be in the PATH.

The --list, --test, --extract and --output-dir options are passed along to unrar/unar, but other options may be ignored for the RAR files. For multi-part RAR archives, the --test requires a writable output directory for temporary files.

Note that is option is geared towards GOG.com installers. Other installers may come be bundled with different extraneous .bin which this option might not be able to handle.

--gog-game-id

1.5+: Determine the ID used by GOG.com for the game contained in this installer. This will only work with Galaxy-ready GOG.com installers.

This option can be combined with --silent to print only the game ID without additional syntax that would make consumption by other scripts harder.

The --gog-game-id action can be combined with --list, --test, --extract and/or --list-languages. If --silent and --gog-game-id are combined with --list and/or --list-languages, the game ID (or an empty line) will be printed on it's own line before the file list but after the language list.

For newer multi-part GOG.com installers the .bin files are not part of the Inno Setup installer but instead are RAR archives. Some of these RAR files are encrypted, with the password being the MD5 checksum of the game ID:

1.5+: If this option is specified, innoextract will only process files whose path matches EXPR. The expression can be either a single path component (a file or directory name) or a series of successive path components joined by the OS path separator (\ on Windows, / elsewhere).

The expression is always matched against one or more full path components. Filtering by parts of filenames is currently not supported. Matching is done case-insensitively.

EXPR may contain one leading path separator, in which case the rest of the expression is matched against the start of the path. Otherwise, the expression is matched against any part of the path.

The --include option may be repeated in order allow files matching against one of multiple patterns. If --include is not used, all files are processed.

--languageLANG

Extract only language-independent files and files for the given language. By default all files are extracted.

1.5+: To also skip language-independent files, combine this option with --language-only.

--language-only

1.5+: Only extract files that are language-specific.

This option can be combined with --language to only extract the files of a specific language.

--license

Show license information.

-l, --list

List files contained in the installer but don't extract anything.

1.0-1.3: You may only specify one of --extract, --list and --test.

1.4+: This option can be combined with --silent to print only the names of the contained files (one per line) without additional syntax that would make consumption by other scripts harder.
The --list action can be combined with --test, --extract, --list-languages and/or --gog-game-id to display the names of the files as they are extracted even with --silent.

--list-languages

1.5+: List languages supported by the installer.

This option can be combined with --silent to print only the identifiers of the languages (one per line) followed by a space and then the language name, without additional syntax that would make consumption by other scripts harder.

The --list-languages action can be combined with --list, --test, --extract and/or --gog-game-id to display the available languages before doing anything else. If --silent and --list-languages are combined with --list and/or --gog-game-id, the languages list will be terminated with an empty line and will precede both the game ID and files list.

-L, --lowercase

Convert filenames stored in the installer to lower-case before extracting.

-d, --output-dirDIR

1.4+: Extract all files into the given directory. By default, innoextract will extract all files to the current directory.
If the specified directory does not exist, it will be created. However, the parent directory must exist or extracting will fail.

-p, --progress[=ENABLE]

By default innoextract will try to detect if the terminal supports shell escape codes and enable or disable progress bar output accordingly. Pass 1 or true to --progress to force progress bar output. Pass 0 or false to never show a progress bar.

-q, --quiet

Less verbose output.

-s, --silent

1.0-1.3: Don't output anything except errors and warnings.

1.4+: Don't output anything except errors and warnings unless explicitly requested.
This option can be combined with --list to print only the names of the contained files (one per line) without additional syntax that would make consumption by other scripts harder.

-t, --test

Test archive integrity but don't write any output files.

1.0-1.3: You may only specify one of --extract, --list and --test.

1.4+: You may only specify one of --extract and --test.

-T, --timestampsTZ

1.4+: Inno Setup installers can contain timestamps in both UTC and 'local' timezones.
The --timestamps option specifies what timezone should be used to adjust these 'local' file times.
Valid values are those accepted by tzset in the TZ environment variable, except with the direction of the time offset reversed: both -T CET and -T GMT+1 will (when DST is in effect) give the same result.

Besides timezones, two special values are accepted:

"none"

Don't preserve file times for extracted files, both for UTC and 'local' timestamps. The file times wil be left the way the OS set them when creating the output files.

"local"

Use the system timezone for 'local' timestamps. This is the normal Inno Setup behavior, and can be used together with the TZ environment variable.

The default value for this option is UTC, causing innoextract to not adjust 'local' file times. File times marked as UTC in the Inno Setup file will never be adjusted no matter what --timestamps is set to.

-v, --version

Print the innoextract version number and supported Inno Setup versions.

1.4+: If combined with the --silent option, only the version number is printed. Otherwise, the output will contain the name (innoextract) followed by the version number on the first line, and, unless the --quiet options is specified, the range of suuported Inno Setup installer versions on the second line.

--no-warn-unused

1.5+: By default, innoextract will print a warning if it encounters .bin files that look like they could be part of the setup but are not used. This option disables that warning.

PATH CONSTANTS

Paths in Inno Setup installers can contain constants (variable or code references) that are expanded at install time. innoextract expands all such constants to their name and replaces unsafe characters with $. For exmaple {app} is expanded to app while {code:Example} is expanded to code$Example.

There is currently no way to configure this expansion except for disabling it with the --dump option.

EXIT VALUES

1.4+:

0

Success

1

Syntax or usage error

2+

Broken or unsupported setup file

LIMITATIONS

There is no support for extracting individual components and limited support for filtering by name.

Included scripts and checks are not executed.

The mapping from Inno Setup constants like the application directory to subdirectories is hard-coded.