RFC: reducing wasted disk space from addon files

Vincent Povirk vincent at codeweavers.com
Wed Mar 6 10:37:36 CST 2019


On Wed, Mar 6, 2019 at 9:08 AM Erich E. Hoover <erich.e.hoover at gmail.com> wrote:
> > If we stayed with MSI instead of CAB (probably we'd need both .msi for
> > downloader and .tar.* file for shared install) then, we'd have two Mono
> > MSIs. Let's call them big and small. I have limited knowledge about MSI,
> > but it should be possible to have small MSI be both part of the big
> > package and its dependency. With that, current appwiz.cpl should work
> > out of the box - small MSI would be installed as part of big MSI.
>
> Yes, it is possible to have one MSI installer call another installer.
> It is also possible to have an MSI installer dependent upon
> environment variables (so the environment variable tells it not to
> unpack the files, so it just installs the registry keys).  It is also
> possible to create MSI installers that use _separate_ CAB files (not
> included in the MSI file itself), so you can download the MSI
> instructions but not download the "files".  If you combine this with
> environment-variable control then you can conceivably save download
> bandwidth and use a single MSI for both "shared" and "prefix-specific"
> behavior.  This technique also has the benefit of giving you the CAB
> file you want without having to extract it from the MSI file.
>
> I, regrettably, have a lot of experience creating strange installers
> like this.  If you are interested in this approach then I can put
> together a simple example to demo how this approach can work.

That's an interesting idea. My understanding was that CAB files used
by an MSI had to be flat (no directories), and this would prevent us
from using the same CAB file as an MSI media and a stand-alone archive
for the shared install.

We could also put the c:\windows\mono directory in a separate feature
so we don't have to install those files, but they'd still use space in
the prefix from copying the MSI.

If you have a code example of an msi that installs another msi, that
could be useful if we decide to use Jacek's idea, or if I need to make
a fake .NET 4 msi.



More information about the wine-devel mailing list