View Full Version : questions about MSI chaining

10-21-2010, 06:34 PM
I've been experimenting with MSI chaining and there are a couple things that don't seem to be working for me (at least not the way the IS help describes the behavior):

I have an MSI Installscript very light project as the "bootstrapper" and then I call either an x86 or x64 package depending on OS. I have install conditions set to either (VersionNT64) or NOT (VersionNT64) to choose the correct chained MSI.

I do not want to stream the additional MSI packages into the first IS project. The help indicated I could set the path for the MSI to the typical MSI cache location for instance ( [LOCALAPPDATAFOLDER]\Downloaded Installations\{GUID}\ ). It turns out this causes the install to fail (generic error). However, if I manually copy the MSI to this cache location before install, the chaining proceeds with no error. Am I doing something wrong here? It seems like Installshield or MSI should handle this step (copying the MSI).

Passing MSI properties and hiding secondary MSI packages from ARP seems to work fine, but when I uninstall the product (from the first package's ARP entry), it does not uninstall the chained MSI(s). My understanding was that Windows Installer wraps this all into one transaction, so I would expect that it would uninstall all the MSI packages together. Again, has anyone gotten this to work? Perhaps I just have it configured incorrectly. Note that there is a default removal condition of REMOVE="ALL" when you add a new chained MSI item, so I had left that in place. The initial project should have REMOVE="ALL" set when I uninstall it.

Based on these issues I'm not getting the benefit I expected from chaining and will probably need to abandon it and find a different (probably much more complex) solution, so I hope someone can help suggest a solution to the issues mentioned above.

Thank you.

10-22-2010, 03:31 AM

please think about errors which could happen during chain installation.

In this case the chain installation and the main installation too are
rolling back. Even if main was correct.

10-22-2010, 11:38 AM
I've got the uninstallation working correctly now. With a more careful read of the chaining properties, I noticed that uninstallation occurs when the uninstall conditions are met AND the install conditions are FALSE. I needed to change the install conditions to the following:

Not Installed AND (VersionNT64)
(or NOT (VersionNT64) for the x86 package).

Thus, the "Not Installed" part evaluates to false and allows the uninstall of the chained package.

I am still wondering about best practices for handling/copying the chained MSI's during install. We will need both a CD installation and a web download setup (where we the keep the initial setup.exe download as small as possible). For the CD case, it would work fine to stream the additional MSI's (and I assume uncheck "delete streamed files" so the CD is not required for the chained MSI's to uninstall from the user's ARP list)... however, the web downloader approach seems a bit trickier. Since I needed to manually copy the chained MSI into place for my test runs to work, it seems like I would need to do the download and copy of these MSI's manually here (perhaps use a little C# app called as a prerequisite in the first package to handle this task?). Any advice on this latter issue?

Thank you.

Tim Mayert
11-01-2010, 03:18 PM
So BrHartmann, have you gotten anywhere with Web install and Chaining?

We are now just looking at chaining a bunch of our projects and are also looking into performing our install as a web install as well so that we do not have a big install on the web that users have to download especially if they do not want to install all the products.

Also just want to confirm that Chaining is only support with MSI 4.5 and higher and that it only supports XP SP2 and up, so XP SP1 and lower does not support Chain, correct?


11-22-2010, 05:11 PM
Hi Tim,

Sorry, hadn't checked back on this thread for a few weeks.

It looked like MSI chaining was not going to allow all the flexibility I needed for the various potential setup workflows, so I went in a different direction. I have the initial user download as a light installscript bootstrapper which provides the UI sequence and then calls the other projects (passing along user choices via command line args), and then fails out (so as not to create an ARP entry). The downstream projects can still be hidden using ARPSYSTEMCOMPONENT property, and the uninstaller for the one main project which does show up for the user in ARP manages the uninstall of the hidden projects as well.

It's perhaps a bit more work to setup, but allows for a better download experience during the installation (using the web downloader, IS provides a nice file download progress meter for each project... I don't believe we can get this level of feedback handling the download manually with CopyFile() or similar in install script). Also, we don't have to worry about MSI 4.5 being required for XP users.

Another issue was that the default value of SourceDir using MSI chaining did not seem to work correctly.