I am using InstallShield 2015 to write an installer of type Basic MSI. I have a server installation, a workstation installation, and a third party (Microsoft) installer for supporting access to .NET Forms via COM interop (Microsoft.InteropformsRedist.msi). The workstation needs to install Microsoft.InteropformsRedist.msi. The server needs to install the workstation. Individually these pairings work, but when the server tries to install the workstation, which in turn wants to install InteropformsRedist, it seems that InteropformsRedist is not getting installed. I see mention of it in the MSI log, but no clear indication that it's not actually installing. I just encountered errors after install that were resolved by manually running InteropformRedist.msi.
The first mention of InteropformsRedist in the log looks like:
InstallShield 12:11:11: Extracting temp files for chained package Pkg1 to 'C:\Users\bmarty\AppData\Local\Temp\{88EF0570-B960-4DD7-BF2F-F942CE0C9EEE}'
MSI (s) (70!C0) [12:11:24:671]: PROPERTY CHANGE: Adding IS_CHAINER_POST_COMMANDLINE property. Its value is '/l"C:\Users\bmarty\AppData\Local\Temp\MSI7fa2d.LOG" /qb /iC:\Users\bmarty\AppData\Local\Temp\{88EF0570-B960-4DD7-BF2F-F942CE0C9EEE}\Microsoft.InteropformsRedist.msi'.
MSI (s) (70!C0) [12:11:24:671]: PROPERTY CHANGE: Adding ISChainPackageCommit property. Its value is 'C:\Users\bmarty\AppData\Local\Temp\{88EF0570-B960-4DD7-BF2F-F942CE0C9EEE}'.
MSI (s) (70!C0) [12:11:24:671]: PROPERTY CHANGE: Adding ISChainPackageRollback property. Its value is 'C:\Users\bmarty\AppData\Local\Temp\{88EF0570-B960-4DD7-BF2F-F942CE0C9EEE}'.
InstallShield 12:11:11: Extracting file 'C:\Users\bmarty\AppData\Local\Temp\{88EF0570-B960-4DD7-BF2F-F942CE0C9EEE}\Microsoft.InteropformsRedist.msi' for chained package Pkg1
MSI (s) (70:EC) [12:11:24:672]: Doing action: InstallInitialize
Action ended 12:11:24: ISChainPackagePrepare. Return value 1.
MSI (s) (70:EC) [12:11:24:673]: Machine policy value 'AlwaysInstallElevated' is 0
MSI (s) (70:EC) [12:11:24:673]: User policy value 'AlwaysInstallElevated' is 0
MSI (s) (70:EC) [12:11:24:673]: BeginTransaction: Locking Server
MSI (s) (70:EC) [12:11:24:674]: Server not locked: locking for product {11FD6005-8100-4B5C-85E6-C26BAD6C8696}
Action start 12:11:24: InstallInitialize.
MSI (s) (70:EC) [12:11:26:245]: Doing action: ISChainPackageRollback
Action ended 12:11:26: InstallInitialize. Return value 1.
MSI (s) (70:EC) [12:11:26:246]: Note: 1: 2205 2: 3: MsiPatchCertificate
MSI (s) (70:EC) [12:11:26:246]: LUA patching is disabled: missing MsiPatchCertificate table
Action start 12:11:26: ISChainPackageRollback.
MSI (s) (70:EC) [12:11:26:249]: Doing action: ISChainPackageCommit
Action ended 12:11:26: ISChainPackageRollback. Return value 1.
Action start 12:11:26: ISChainPackageCommit.
MSI (s) (70:EC) [12:11:26:250]: Doing action: AllocateRegistrySpace
Action ended 12:11:26: ISChainPackageCommit. Return value 1.
Action start 12:11:26: AllocateRegistrySpace.
MSI (s) (70:EC) [12:11:26:251]: Doing action: ProcessComponents
Action ended 12:11:26: AllocateRegistrySpace. Return value 1.
Action start 12:11:26: ProcessComponents.
MSI (s) (70:EC) [12:11:26:253]: Doing action: UnpublishComponents
Action ended 12:11:26: ProcessComponents. Return value 1.
Is there any indication in there why it didn't actually install? Is there some trick to making this work?
If you're using the "Chained MSI Packages" area of the releases view, you're using embedded chaining, via the MsiEmbeddedChainer table. I haven't ever found clear documentation on its limits, but it has several. The relevant one you are seeing is that it will not launch an embedded chainer from within another chainer. Perhaps this is because if the outer chainer has subsequent packages, it doesn't know to reclaim ownership of the transaction, and cannot do so before the inner chainer releases (or commits) the transaction; this would cause a rollback per the commentary on phChangeOfOwnerEvent of MsiJoinTransaction.
We learned from experience that external or bootstrap chainers have fewer odd behaviors, and thus I would recommend them over embedded chainers. If you want to do that via InstallShield, you'll need the Suite/Advanced UI project type of the Premier edition. (If all but one of your packages can be considered as dependencies, and you imported them from prq files, and they would fit into the limitations of the Advanced UI project in the Professional edition.)