How do I extract files from an MSI package?

We have some old patches that we want to get the files from but don't wish to spend the time installing them to a machine.

Can anyone advise a way to extract files from an MSI installation package?


Solution 1:

First, to access a command prompt, do this:

  1. Click the Start button.

  2. Click All Programs.

  3. Go into Accessories.

  4. Left-click on Command Prompt.

Once you have your command prompt, input the following:

msiexec /a drive:\filepath\to\MSI\file /qb TARGETDIR=drive:\filepath\to\target\folder

using the desired locations to fill the above mentioned filepaths. Example:

msiexec /a c:\testfile.msi /qb TARGETDIR=c:\temp\test

Solution 2:

Use 7Zip.
It will unpack MSI , CAB, some EXE, and a lot more packages for you .There is no need for admin privileges to run this either.

-EDIT-

And its open source, so no nagging messages begging you to buy the stuff

Solution 3:

There is also lessmsi which is completely free and open source.

There are no advertisements or nagging messages, it will preserve directory structure and file names correctly, has a sophisticated command line interface, as well as a graphical user interface that allows browsing through the files as well as viewing internal MSI tables and other MSI attributes.

Solution 4:

There is built-in MSI support for file extraction (admin install)

MSI or Windows Installer has built-in support for this - the extraction of files from an MSI file. This is called an administrative installation. It is basically intended as a way to create a network installation point from which the install can be run on many target computers. This ensures that the source files are always available for any repair operations.

Note that running an admin install versus using a zip tool to extract the files is very different! The latter will not adjust the media layout of the media table so that the package is set to use external source files - which is the correct way. Always prefer to run the actual admin install over any hacky zip extractions. As to compression, there are actually three different compression algorithms used for the cab files inside the MSI file format: MSZip, LZX, and Storing (uncompressed). All of these are handled correctly by doing an admin install.


Admin-installs have many uses

It is recommended to read more about admin-installs since it is a useful concept, and I have written a post on stackoverflow: What is the purpose of administrative installation initiated using msiexec /a?.

In essence the admin install is important for:

  • Extracting and inspecting the installer files
  • Deployment via systems management software for example SCCM (avoids huge, cached MSI files in C:\Windows\Installer since files are extracted from internal cabs)
  • Corporate application repackaging
  • Repair, modify and self-repair operations
  • Patching & upgrades
  • MSI advertisement (the "run from source" feature)
  • A number of other smaller details

Please read the stackoverflow post linked above for more details. It is quite an important concept for system administrators, application packagers, setup developers, release managers, and even the average user to see what they are installing etc...


Admin-install, practical how-to

You can perform an admin-install in a few different ways depending on how the installer is delivered. Essentially it is either delivered as an MSI file or wrapped in an setup.exe file.

Run these commands from an elevated command prompt, and follow the instructions in the GUI for the interactive command lines:

  • MSI files:

    msiexec /a File.msi
    

    that's to run with GUI, you can do it silently too:

    msiexec /a File.msi TARGETDIR=C:\MyInstallPoint /qn
    
  • setup.exe files:

    setup.exe /a
    

A setup.exe file can also be a legacy style setup (non-MSI) or the dreaded Installscript MSI file type - a well known buggy Installshield project type with hybrid non-standards-compliant MSI format. It is essentially an MSI with a custom, more advanced GUI, but it is also full of bugs.

For legacy setup.exe files the /a will do nothing, but you can try the /extract_all:[path] switch as explained in this pdf. It is a good reference for silent installation and other things as well. Another resource is this list of Installshield setup.exe command line parameters.

MSI patch files (*.MSP) can be applied to an admin image to properly extract its files. 7Zip will also be able to extract the files, but they will not be properly formatted.

Finally, if no other way works, you can get hold of extracted setup files by cleaning out the temp folder on your system, launch the setup.exe interactively and then wait for the first dialog to show up. In most cases the installer will have extracted a bunch of files to a temp folder. Sometimes the files are plain, other times in CAB format, but Winzip, 7Zip or even Universal Extractor (haven't tested this product) - may be able to open these.

Solution 5:

I would recommend UniExtract for making neoice's solution even easier. It does the same thing, just is more automated and allows several methods for extracting MSI files, not just an administrative install (as his solution is using).

UniExtract can also handle exe's packaged with WISE or InstallShield, as well as a variety of other compressed formats. Oh, and its free.

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.