chained msi's/Bootstrapper/prerequisite?

可紊 提交于 2019-12-05 03:59:31

I've looked at similar problems, and I sympathize because there are no easy answers that I know of. If I understand correctly, you basically want a setup.exe that will detect the current versions of the pre-requisites on the target system, install them if they're missing, and upgrade them if they're out of date.

A couple of options that I`ve used in the past are:

  1. Microsoft's Generic Boostrapper. I've used this before, and rather like it. The downsides are that if you'll have to write your own boostrapper manifest if you're prerequisite isn't one of the predefined ones. Writing manifests can be a little tricky, and time-consuming, though there is a tool that helps. Also, I haven't been able to find a way to uninstall an installed component if the msi can`t do an upgrade (something else I've run into). If you figure it out let me know!

  2. Write your own boostrapper/chainer. I started with the Microsoft .NET Framework Setup.exe Bootstrapper Sample. It comes with source code so you have a lot of flexibility in how your components get deployed. Here however, the code is C++ and the logic for checking pre-requisites and issuing the proper install commands is tricky and hard to get right.

Update: as a I write this (August 2009) it's not ready yet but the Wix project is working on it's own bootstapper/chaniner called Burn which for those of us that love Wix looks very promising.

Since you "master" installer is empty and doesn't really install anything of its own, you could use an InstallScript project (instead of an MSI-based project), using the installation script as the "bootstrapper". If you use InstallScript, you don't even need to worry about setting up the environment to run your code, since it will be configured automatically by InstallShield; If you use .NET for the bootstrapper, you will need to either require .NET or install it as part of your installation.

Since InstallScript projects don't use MSIs, you don't have to worry about running other MSIs during your installation's Install Execute sequence. You can use the InstallScript "LaunchAppAndWait" function to call the installations for whichever components need to be installed/updated.

By "components" do you refer to Installshield/MSI Components/Features? Or are you using this in your own terminology? You can't update a component without releasing an entirely new package version as far as I'm aware.

My suggestion would be to deploy a "web downloader" installer with uncompressed files (or one CAB per component) then your payload is going to be say 300kb, and only the features that the user selects will be downloaded from the net.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!