On Tue, 2019-03-12 at 11:34 -0500, Vincent Povirk wrote:
I think the simplest thing will be to duplicate this logic in mscoree, except that mscoree will not do its own download. Instead of looking for wine-mono-4.8.0.msi in those directories, mscoree will look for a directory named wine-mono-4.8.0. If it doesn't find that directory in any of the above locations, it will fall back on appwiz.cpl, which will still look for a .msi in all of those places, downloading and caching it if necessary, the way it does now.
That should cover everyone's use cases at least as well as the current solution, and it won't require anyone building or packaging wine to change anything. It will be necessary to replace the .msi with a directory (built from the source tarball or extracted from a binary tarball on winehq) if packagers want to take advantage of this work to reduce prefix size.
Did you consider using the existing msi for the shared scenario? You'd run the installer like this in each prefix (without mono installed):
$ wine msiexec /i wine-mono-4.8.0.msi MONOBASEDIR=z:/home/user/shared_mono/wine-mono-4.8.0
The package would need an extra registry entry that saves MONOBASEDIR, which would then be read by mscoree.get_mono_path().
One should be careful not to remove the package from any of the prefixes, but perhaps that's not too much of a concern when the prefixes are managed.