innoextract(1)
π innoextract(1) β the whole manual, but make it make sense π
okay bestie, so this is the man page for innoextract, from the General Commands Manual section 1 (that's the "user commands" section, iykyk). it's giving very much "I need to get files out of an installer and I refuse to run the installer". let's go π¦
πΈ NAME πΈ
innoextract β a tool to extract installers created by Inno Setup
no cap, that's the whole vibe. β¨
π SYNOPSIS π
so there are three ways to call her, and they're all literally just variations on the same energy:
innoextract [--extract] [--lowercase] [options] [--] installers ...
innoextract --list [options] [--] installers ...
innoextract --test [options] [--] installers ...
like, you give her installers, she does a thing. periodt. π
π«Ά DESCRIPTION π«Ά
innoextract is a tool that can extract installer executables created by Inno Setup. that's the whole job. that's the mission. π
innoextract will extract files from installers specified on the command line.
and here's the lil detail that saves your whole life: to extract a multi-part installer with external data files, only the executable (.exe) file needs to be given as an argument to innoextract. you do not have to go hunting for the .bin files, bestie. she'll find them. main character energy fr fr. π
β OPTIONS SUMMARY β
okay so here's the quick little cheat sheet of everything innoextract can do. this is the TL;DR β the full deets are down below in the detailed documentation, so don't come for me if you want the deep lore. π₯
π Generic options
-h,--helpβ Show supported options-v,--versionβ Print 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-sizesβ List file sizes--list-checksumsβ List file checksums-i,--infoβ Print information about the installer--list-languagesβ List languages supported by the installer--gog-game-idβ Determine the GOG.com game ID for this installer--show-passwordβ Show password check information--check-passwordβ Abort if the password is incorrect-V,--data-versionβ Only print the data version
π Modifiers
--codepage CODEPAGEβ Encoding for ANSI strings--collisions ACTIONβ How to handle duplicate files--default-languageβ Default language for renaming--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"-d,--output-dir DIRβ Extract files into the given directory-P,--password PASSWORDβ Password for encrypted files--password-file FILEβ File to load password from-g,--gogβ Process additional archives from GOG.com installers--no-gog-galaxyβ Don't re-assemble GOG Galaxy file parts-n,--no-extract-unknownβ Don't extract unknown Inno Setup versions
π Filters
-m,--exclude-tempβ Don't extract temporary files--language LANGβ Extract only files for this language--language-onlyβ Only extract language-specific files-I,--include EXPRβ Extract only files that match this path
π Display options
-q,--quietβ Output less information-s,--silentβ Output only error/warning information--no-warn-unusedβ Don't warn on unused.binfiles-c,--color[=ENABLE]β Enable/disable color output-p,--progress[=ENABLE]β Enable/disable the progress bar
β¨ OPTIONS β¨
now the full rundown, one by one, no skips, no skimming, we're doing this properly π
--β Treat all arguments after this one as files, even if they begin with a dash.
(yes bestie, this is the "please stop reading my filenames as flags" escape hatch. iconic.)
--check-passwordβ Abort processing if the password provided using the--passwordor--password-fileoption does not match the checksum stored in the installer.
The password checksum used for this check can be retrieved using the --show-password option.
--codepage CODEPAGEβ Non-Unicode versions of Inno Setup store strings in an unspecified encoding. By default,innoextractwill guess the encoding from the installer's language list, falling back toWindows-1252. This option can be used to override that guess by specifying a non-zero Windows codepage number to use.
On non-Windows platforms, innoextract will ignore the system locale and always use UTF-8 as the filesystem and standard output encoding β the --codepage option only changes the input encoding. However, using codepage number "65001" instructs innoextract to assume all strings are already encoded as UTF-8 and to output them without conversion.
This option has no effect with Unicode-enabled installers, which always use UTF-16LE. Invalid UTF-16 data is represented using the WTF-8 encoding which is a straightforward extension of UTF-8 to represent unpaired UTF-16 surrogate code units.
--collisions ACTIONβ Inno Setup installers can contain duplicate files with the same name. This option tellsinnoextractwhat 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, its architecture, 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."rename-all"β Rename all colliding files by appending a suffix comprised of the file's language, its architecture, 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 language 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 the architecture is not the same for all files in the collision set,
"@32bit"or"@64bit"(without quotes) is appended to all files that are specific to a single architecture. - 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 at0) 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 while "rename-all" applies them to all files in the collision set.
-c,--color[=ENABLE]β By defaultinnoextractwill try to detect if the terminal supports shell escape codes and enable or disable color output accordingly. Specifically, colors will be enabled if bothstdoutandstderrpoint to a TTY, theTERMenvironment variable is not set to"dumb"and theNO_COLORenvironment variable is unset. Pass1ortrueto--colorto force color output. Pass0orfalseto never output color codes.-V,--data-versionβ Print the Inno Setup data version of the installer and exit immediately.
The version printed using this option is the one stored in the setup file and can differ from the version printed with other actions as the stored data version is not always correct. (she's a lil unreliable, we love her anyway π)
This option can be used to determine if a file is an Inno Setup installer without loading any compressed headers.
This option cannot be combined with any other action.
--default-language LANGβ 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.
--dumpβ Don't convert Windows paths to UNIX paths and don't substitute constants in paths.
β οΈ When combining--dumpwith--extractinnoextractwill not ensure that the paths don't point outside the destination directory. Use this option with caution when handling untrusted files. like, for real, be careful, bestie π
-m,--exclude-tempβ 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β Extract all files to the current directory. This action is enabled by default, unless one or more of the--list,--list-sizes,--list-checksums,--test,--list-languages,--gog-game-id,--show-passwordor--check-passwordactions are specified.
By default innoextract will continue after encountering file checksum errors. The --extract option can be combined with --test to abort on checksum errors.
-n,--no-extract-unknownβ By defaultinnoextractwill try to extract installers with an unknown Inno Setup data version by treating it as the closest known version. This option tellsinnoextractto abort instead.-g,--gogβ Try to process additional.binfiles 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.binfiles are RAR archives, potential encrypted with the MD5 checksum of the game ID (see the--gog-game-idoption).
okay bestie we're not done yet, there's more manual to get through β keep scrolling, the rest is coming up next π π¦
Extracting these RAR archives needs rar, unrar or lsar/unar command-line utilities sitting in your PATH, no exceptions bestie. π
The --list, --test, --extract and --output-dir options get passed straight along to unrar/unar, but other options may just be ignored for the RAR files. For multi-part RAR archives, --test needs a writable output directory for temporary files, and you can point at it with the --output-dir option. If that output directory doesn't exist, it gets created and then removed once testing is done. Parent directories are NOT created. Temporary files created inside the directory are always removed. π§Ή
Heads up: this option is geared towards GOG.com installers. Other installers may come bundled with different extraneous .bin files which this option might not be able to handle. π
This option also forces re-assembly of GOG Galaxy file parts. See the --no-gog-galaxy option for details. β¨
--no-gog-galaxyβ so some GOG.com installers have files in GOG Galaxy format (split into multiple parts, each one individually compressed) that get re-assembled using post-install scripts. By default, innoextract will try to re-assemble those files if it detects a GOG.com installer. This option disables that. GOG.com installers are detected using the publisher and URL fields in the setup headers. Use the--gogoption to force reassembly for all installers.--gog-game-idβ figure out the ID that GOG.com uses for the game inside this installer. This will only work with Galaxy-ready GOG.com installers, fr fr. You can combine this with--silentto print only the game ID, with no extra syntax that would make it harder for other scripts to consume. π The--gog-game-idaction can be combined with--list,--test,--extractand/or--list-languages. If--silentand--gog-game-idare combined with--listand/or--list-languages, the game ID (or an empty line) will be printed on its own line before the file list but after the language list. For newer multi-part GOG.com installers, the.binfiles are not part of the Inno Setup installer β they're RAR archives instead. Some of these RAR files are encrypted, with the password being the MD5 checksum of the game ID:
innoextract --gog-game-id --silent setup_....exe | md5sum | cut -d ' ' -f 1
-h,--helpβ show a list of the supported options. That's it, that's the whole vibe. π«Ά-I,--includeEXPR β if you use this, 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--includeoption may be repeated to allow files matching against one of multiple patterns. If--includeisn't used, all files are processed. πΈ-i,--infoβ a lil convenience option that enables all the actions that print information about the installer. π
Scripts should not rely on the output format with this option β they should enable the individual actions instead.
Currently this option enables --list-languages, --gog-game-id and --show-password.
--languageLANG β extract only language-independent files plus the files for the given language. By default all files are extracted. To also skip the language-independent files, combine this option with--language-only.--language-onlyβ only extract files that are language-specific. This option can be combined with--languageto only extract the files of a specific language. π--licenseβ show license information.-l,--listβ list the files contained in the installer but don't extract anything. This action also enables the--list-sizesaction unless either--quietor--silentis specified. This option can be combined with--silentto print only the names of the contained files (one per line) without additional syntax that would make consumption by other scripts harder. The--listaction can be combined with--test,--extract,--list-languagesand/or--gog-game-idto display the names of the files as they're extracted, even with--silent. π--list-checksumsβ list checksums for the files contained in the installer. This option implies the--listaction and can be combined with the--list-sizesoption to print both the size and checksum for each file. With--silent, the file checksum will be printed at the start of the line (but after the file size if enabled with the--list-sizesoption), followed by a space. Otherwise the checksum is printed after the file name. The checksum type can be one ofAdler32,CRC32,MD5orSHA-1, and it's printed in front of the checksum hash followed by a space.Adler32andCRC32checksums are printed as0xfollowed by the 32-bit hexadecimal value. Different files in the same installer can have different checksum types if GOG Galaxy file part reassembly isn't disabled using the--no-gog-galaxyoption. π€―--list-languagesβ list the languages supported by the installer. This option can be combined with--silentto 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-languagesaction can be combined with--list,--test,--extractand/or--gog-game-idto display the available languages before doing anything else. If--silentand--list-languagesare combined with--listand/or--gog-game-id, the languages list will be terminated with an empty line and will precede both the game ID and files list. β--list-sizesβ list uncompressed sizes for files contained in the installer. This option implies the--listaction and can be combined with the--list-checksumsoption to print both the size and checksum for each file. With--silent, the file size in bytes will be printed at the start of the line followed by a space. Otherwise the size is printed after the file name in a human-friendly format. π-L,--lowercaseβ convert filenames stored in the installer to lower-case before extracting.-d,--output-dirDIR β extract all files into the given directory. By default, innoextract will extract all files to the current directory. If the specified directory doesn't exist, it will be created. However, the parent directory must exist or extracting will fail. π-P,--passwordPASSWORD β specifies the password to decrypt encrypted files. The password is assumed to be encoded as UTF-8 and converted to the internal encoding used in the installer as needed. Use the--password-fileoption to load the password from a file or standard input instead. This option cannot be combined with--password-file. If this password doesn't match the checksum stored in the installer, encrypted files will be skipped but unencrypted files will still be extracted. Use the--check-passwordoption to abort processing entirely if the password is incorrect. π--password-fileFILE β load a password from the specified file. Only the first line, excluding the terminating carriage return and/or line break, is used as the password. The password is assumed to be encoded as UTF-8 and converted to the internal encoding used in the installer as needed. If the special file name-is used, the password will be read from standard input. Use the--passwordoption to specify the password on the command-line instead. This option cannot be combined with--password. If this password doesn't match the checksum stored in the installer, encrypted files will be skipped but unencrypted files will still be extracted. Use the--check-passwordoption to abort processing entirely if the password is incorrect. π-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. Pass1ortrueto--progressto force progress bar output. Pass0orfalseto never show a progress bar. π¦-q,--quietβ less verbose output.--show-passwordβ show checksum$cand salt$sused for the password$pcheck, as well as the encoding of the password. The checksum is calculated from the salt concatenated with the password:
$c = hash($s . $p)
With the --silent option, the checksum name and hash is printed on one line separated by a space, followed by the salt encoded as hex bytes and the password encoding on separate lines. Checksum types can be CRC32, MD5 or SHA-1, although CRC32 is not used in installers with encryption. Use the --password or --password-file option together with --check-password to check if a password matches this checksum. π₯
-s,--silentβ don't output anything except errors and warnings unless explicitly requested, and use a machine-readable output format. This option can be combined with--listto 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. This option can be combined with--extractto abort on file checksum errors. β-T,--timestampsTZ β Inno Setup installers can contain timestamps in both UTC and 'local' timezones. β°
The --timestamps option is the one that says which timezone gets used to adjust those 'local' file times. β¨
Valid values are literally anything tzset accepts 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 you the exact same result. π
And besides regular timezones, two special values are accepted:
"none"β don't preserve file times for extracted files, for both UTC and 'local' timestamps. The file times get left exactly the way the OS set them when it created the output files."local"β use the system timezone for 'local' timestamps. This is the normal Inno Setup behavior, and you can use it together with theTZenvironment variable. π«Ά
The default value for this option is UTC, which means innoextract does not adjust 'local' file times. And file times marked as UTC inside the Inno Setup file will never be adjusted, no matter what --timestamps is set to. No cap. π₯
-v,--versionβ print the innoextract version number and the supported Inno Setup versions. π
If you combine it with the --silent option, only the version number gets printed. Otherwise the output has the name (innoextract) followed by the version number on the first line, and β unless the --quiet option is specified β the range of supported Inno Setup installer versions on the second line.
--no-warn-unusedβ by default, innoextract will print a warning if it encounters.binfiles 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 get expanded at install time. innoextract expands all such constants to their name, and replaces unsafe characters with $. For example {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. That's it, that's the whole config situation. π
β¨ EXIT VALUES β¨
0β Success π1β Syntax or usage error π2+β Broken or unsupported setup file, or input/output error π
π§ LIMITATIONS π§
Okay so real talk, here's what it can't do:
- There is no support for extracting individual components, and only 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.
- Names for data slice/disk files in multi-file installers must follow the standard naming scheme.
π SEE ALSO π
cabextract(1), unar(1), unrar(1), unshield(1), tzset(3)
π BUGS π
Please report bugs to https://innoextract.constexpr.org/issues. bestie we will read them π
π CREDITS π
innoextract is distributed under the zlib/libpng license. See the LICENSE file for details. π
A website is available at https://constexpr.org/innoextract/. π
This program uses the excellent lzma/xz decompression library written by Lasse Collin. π iconic behavior, honestly.
π AUTHOR π
Daniel Scharrer (daniel@constexpr.org)
and that's the whole page, bestie π this was innoextract version 1.9, dated 2020-08-09 β go extract something and slay π
β¨
π¦ where this page comes from
- alpine 3.24: innoextract-doc 1.9-r10 Β· Zlib
- arch rolling: innoextract 1.9-17 Β· ZLIB
- debian bookworm: innoextract 1.9-0.1 Β· Zlib
- debian trixie: innoextract 1.9-0.1+b1 Β· Zlib
- epel 9: innoextract 1.9-8.el9 Β· zlib
- fedora 43: innoextract 1.9-17.fc43 Β· zlib
- fedora 44: innoextract 1.9-19.fc44 Β· zlib
- opensuse-leap 16.0: innoextract 1.9-bp160.1.12 Β· Zlib
- opensuse-leap 16.0: innoextract 1.9-bp160.1.12 Β· Zlib
- opensuse-leap 16.0: innoextract 1.9-bp160.1.12 Β· Zlib
- opensuse-leap 16.0: innoextract 1.9-bp160.1.12 Β· Zlib
- ubuntu noble: innoextract 1.9-0.1build1 Β· Zlib
- ubuntu questing: innoextract 1.9-0.1build2
- ubuntu resolute: innoextract 1.9-3 Β· Zlib
- ubuntu stonking: innoextract 1.9-4 Β· Zlib
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms