cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
clephasb
Level 3

Creating Basic MSI that invokes another msi installation

We currently have a InstallScript project which runs fine. The resulting setup can be made unattended/silent fine.
In this setup we have some features and invoke a number of third-party installations (that are a prerequisite for running our software).
However, we have customers that want an MSI file and therefore we resorted to the Basic MSI project type.

The setup is made without too much hassle (I'm fairly new to InstallShield) and I can generate a .exe and .msi from this project.
However the only issue I have left is invoking one of the third-party installers.
That third-party installer (made with NSIS) on its turn invokes another installer which is MSI based.

This results in having error 1500 - the fact that you cannot run a msi type installation while another is running.

I've tried scheduling the CA (that are used to invoke the third-party installers) as the first action and as last, but no success.
Before resorting on the more unorthodox scenarios (like creating a task on Windows Task manager that runs after our installer finishes, or at the next reboot and forcing a reboot - which our customers don't like) or a scenario that we don't bundle the 'faulting' installer (we really like to be able to hand over a single intaller and not multiple), I'd thought I ask your input.

I've tried searching for solutions everywhere on the internet, but either I'm failing due to wrong keywords or I just didn't stumble on the right post yet.

Are there any options left for us to create a single MSI installer that is able to invoke this third-party installer (which invokes a msi installer on its turn)?
Labels (1)
0 Kudos
(2) Replies
clephasb
Level 3

Due to lack of response, I asked the same question on StackOverflow, see http://stackoverflow.com/questions/7645801/creating-basic-msi-that-invokes-another-msi-installation.

Some of the answers here:


Realistically, most people who want a raw MSI want it that way to deploy it. So typically they can be given instructions on installing the dependencies as a separate step. – Michael Urman



There's also chaining. If running on Windows Installer 4.5 or later, either the bootstrap or the MsiEmbeddedChainer table can kick this off, and the latter presents just an MSI to the user. However the latter doesn't run properly in all scenarios under Terminal Services. – Michael Urman yesterday



Since an EXE bootstrapper is not acceptable, there is only one solution:

* store the prerequisite installers in Binary table of your MSI
* create some custom actions which extract them from this table and launch them
* schedule them in InstallUISequence, for example right before Progress dialog
* use searches to detect if the prerequisites are installed or not
* condition your custom actions with the search results

Basically, you need to launch them during the installation UI. It won't work if you launch them during InstallExecuteSequence.

I don't think the basic MSI project supports this, but it may be supported by more advanced project types. Other setup authoring tools offer direct support for this. - Cosmin Pirvu
0 Kudos
clephasb
Level 3

See the following StackOverflow question that somewhat answers my post: http://stackoverflow.com/questions/7645801/creating-basic-msi-that-invokes-another-msi-installation


Realistically, most people who want a raw MSI want it that way to deploy it. So typically they can be given instructions on installing the dependencies as a separate step. – Michael Urman



There's also chaining. If running on Windows Installer 4.5 or later, either the bootstrap or the MsiEmbeddedChainer table can kick this off, and the latter presents just an MSI to the user. However the latter doesn't run properly in all scenarios under Terminal Services. – Michael Urman



Windows Installer doesn't support this. – Cosmin Pirvu



Since an EXE bootstrapper is not acceptable, there is only one solution:

* store the prerequisite installers in Binary table of your MSI
* create some custom actions which extract them from this table and launch them
* schedule them in InstallUISequence, for example right before Progress dialog
* use searches to detect if the prerequisites are installed or not
* condition your custom actions with the search results

Basically, you need to launch them during the installation UI. It won't work if you launch them during InstallExecuteSequence.

I don't think the basic MSI project supports this, but it may be supported by more advanced project types. Other setup authoring tools offer direct support for this. - Cosmin Pirvu
0 Kudos