Windows – Patch msp into msi package

packageswindows-installer

The latest update of Windows Live Messenger is an msp added to the package. I want to patch a msp into an msi.

Reference download
http://wl.dlservice.microsoft.com/download/8/3/D/83D75746-DF04-45E9-8374-BD31B9419128/en/wlsetup-all.exe

I extract all msi and msps from this.

(To get the msp and msi's I did the following
Use resource hacker to open up wlsetup-all.exe

In the left hand tree browse to PACKAGE
Right click PACKAGE, save PACKAGE resources
Save to a new temp folder
Eg. D:\temp\package.rc

This will output a whole lot of .bin files
These are just cab files so we need to do a mass rename
“ren *.bin *.cab”

Once done select all cab files and extract to a new sub folder \extracted
In \extracted you will see all the msi, msp and 7z files you need)

I try to apply the msp directly with no result
msiexec /p messenger.msp /a messenger.msi

I also try doing a admin install with nothing being extracted.

Best Answer

The Microsoft article Deploying Product Updates from an Administrative Installation Point describes (among others) how .msp can be applied to .msi to generate updated .msi :

msiexec.exe /a "[path to .msi file]" /p "[path to .msp file]"

If an update contains multiple MSP files, you will need to run the command line separately for each MSP file that you apply to the administrative installation point - you cannot reference multiple MSP files on the same command line. The article describes in detail each command-line options.

[EDIT]

The above article may be misleading.

Before the patch step, one should first create an administrative install point from the original msi using the syntax msiexec /a original.msi.path (evoked from a different folder from where the source files are), then integrate the msp (execute this from the folder with the files in it), test the installer from the administrative share first, and afterward repackage the product.

Use the entire syntax as advised in the MS article :

msiexec /p [path\name of update MSP file] 
/a [path\name of MSI file] SHORTFILENAMES=TRUE /qb 
/L* [path\name of log file]

For a full example, see this article: MSP to MSI - Office Communicator.

Related Question