Universal Extractor is a program do to exactly what it says: extract files from any type of archive, whether it's a simple zip file, an installation program, or even a Windows Installer (.msi) package. This is still a work in progress (see details below), but so far it's proven quite useful and I feel others can also benefit from it.
I should stress that this application is not intended to be a general purpose archiving program. It will never replace WinRAR, 7-Zip, etc. What it will do is allow you to extract files from virtually any type of archive, regardless of source, compression method, etc. The original motivation behind this project was that I wanted an easy, convenient way to extract files from installation packages, such as Inno Setup or Windows Installer packages, without pulling up a command line every time. In the process I got a little carried away and ended up throwing in support for every kind of archive format I possibly could find.
Universal Extractor, like most of my Windows programs, is written in AutoIt, a powerful open source scripting language. Universal Extractor itself, however, is just a front-end that uses many other programs to do the dirty work. Please see the Credits section below for additional information.
When a file is passed to UniExtract, it begins by scanning the file with TrID. If the file format matches one of the supported non-executable formats listed below, it immediately begins extraction from the archive. If it's an executable file, it calls PEiD to analyze the file signature. If the signature indicates that it's a supported format, then it attempts to begin extraction. If it is not a recognized signature, it will try running it through 7-Zip and UnZip as default cases. If 7-Zip or UnZip recognizes it, it will be extracted; otherwise, UniExtract displays an error message and exits.
Note: Filetype scanning with TrID is new as of v1.5. Older versions relied on the file extension to identify the filetype. This behavior is still used if the TrID scan cannot determine the filetype.
If the filetype is supported, UniExtract begins by checking for a valid destination directory and recording the directory size. If necessary, a new directory will be created (with a directory size of zero). UniExtract then spawns a shell and calls the supporting binary to begin extracting files from the selected archive to the destination directory. After completion, UniExtract checks the size of the subdirectory to determine if extraction was successful; if the size is greater than the initial size, UniExtract assumes success and exits. If extraction fails, UniExtract notifies the user and leaves a log file (uniextract.log) that (should) contain any error messages.
The uniextract.log file is created during the extraction process by the tee program. Essentially, all output from the running binary is redirected to tee, which in turn writes the output to the log file as well as echo it to the screen to give the user current progress. Upon successful execution this file is deleted, but if an error is detected it is left alone for the user to review. Note: As of v1.4, the location of uniextract.log can be changed to any user-specified directory.
Changelog for this release:
- Added support for environmental variables (eg., specify %temp% for debug dir)
- Added support for XZ compressed files and txz/tlz archives via 7-Zip
- Added support for Windows Installer merge modules (.msm) via MsiX
- Added support for NBH files via NBHextract
- Added translations for Armenian, Czeck, Persian (Farsi), Serbian, Swedish
- Changed 7-Zip unpacking behavior; now attempts brute force extraction only after External PEiD scan; change due to aggressive .exe resource extraction in new versions
- Changed Windows installer support (.msi, .msp) to use MsiX instead of msi2xml
- Changed LZMA support to use 7-Zip for extraction
- Changed FEAD support to use PEiD rather than TrID for detection
- Changed following formats to call 7z by name (also see 7-Zip debug comment): bz2, chm, gz, tar, Z this is mostly for code cleanup; functionality should be the same
- Fixed InstallShield 5.x regression in 1.6 preventing successful extraction
- Fixed bug in extraction of non-TAR LZW compressed files
- Fixed bug that prevented picking files after toggling history option
- Fixed bug in display of history combo boxes when no items listed
- Fixed cosmetic bug in Visual C++ SFX status dialog
- Fixed cosmetic bug in status dialogs due to extra padding by AutoIt
- Removed lzma helper binary
- Removed msi2xml helper binary and MSXML download link on MSI selection page
- Removed Windows NT 4.0 support from installer
- Removed debug output for 7-Zip, arj, hlp; buffers output, preventing proper user feedback and input prompts
- Updated success/fail detection to check output directory timestamp; can detect cases where files are overwritten, which old method missed; will still consider failed if user chooses not to overwrite files, or if all files are written to a subdirectory of the output directory
- Updated RPM and DEB support to extract interim CPIO and TAR files
- Updated FEAD support to workaround read-only permission issue
- Updated Zip support to log unzip output and permit minor reported unzip errors
- Updated PEiD detection of Microsoft SFX cab files for more reliable extraction
- Updated some UniExtract window sizes for better internationalization support
- Updated translations for Italian, Korean, Russian
- Updated 7-Zip to 9.13 beta
- Updated AutoIt to 220.127.116.11 and replaced deprecated _ArrayCreate UDF
- Updated InfoZip unzip to 6.0.0
- Updated Inno Setup to 5.3.9
- Updated innounp to 0.31 (supports Inno Setup 5.3.9)
- Updated InstallExplorer WCX to 0.9.2
- Updated MSI WCX to 1.2.1
- Updated PEiD to 0.95
- Updated UnRAR to 3.93