[wix-devs] Selection of compatible VS instances

Sean Hall r.sean.hall at gmail.com
Sat Jan 28 17:52:35 PST 2017


I'm going to have to agree with Bob here, installing an extension for
VS2017 from an MSI is seriously broken as currently designed. Based on the
modular nature VS2017, extension authors are not going to be able to assume
that their required components are installed and they will have no idea
whether their required components are delivered by MSI.  This means that
there is no way for them or WiX to know at compile time whether their
extension has any chance of getting installed by shipping a naked MSI.  I
can think of the following solutions:

1) Microsoft eliminates the nested MSI install problem by requiring
optional VS components to be non-MSI.
2) Microsoft adds the functionality in VSIXInstaller.exe and VS to be able
to accept an install request during an MSI install, and complete the
install at a later time.

The last resort would be for WiX to emit a warning at compile time saying
that installing VS extensions inside of an MSI may fail due to requiring
nested MSI installs.

On Sat, Jan 28, 2017 at 3:32 PM, Bob Arnson <bob at firegiant.com> wrote:

> #alternativefacts. For my install of RC3 Pro with C++ and desktop .NET,
> it's 246 VSIX packages and 37 MSI packages.
>
> -----Original Message-----
> From: wix-devs [mailto:wix-devs-bounces at lists.wixtoolset.org] On Behalf
> Of Sean Hall
> Sent: Saturday, 28 January, 2017 16:13
> To: WiX Toolset Developer Mailing List <wix-devs at lists.wixtoolset.org>
> Subject: Re: [wix-devs] Selection of compatible VS instances
>
> Can you give an example of a component or workload that is installed by
> MSI?  I thought all parts of the Visual Studio install have been migrated
> away from MSI.
>
> On Sat, Jan 28, 2017 at 1:17 PM, Heath Stewart <heaths at outlook.com> wrote:
>
> > VSIX v3 are backward compatible. They are still valid v2s that work
> > downlevel. I’m not sure what makes it a v1, but if v2s are backward
> > compatible with v1s then that will continue to work. I worked closely
> > with the Extensibility team to ensure backward compatibility long ago
> > (hence extending the formats – unlike what VSTS and VSCode use as
> “.vsix” files).
> >
> > I’m not suggesting that WiX doesn’t include harvesting support. I’m
> > saying that the initial feature will be used by a few internal and
> > external partner that we’ve already instructed to author dependencies.
> >
> > Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for
> > Windows 10
> >
> > From: Bob Arnson<mailto:bob at firegiant.com>
> > Sent: Saturday, January 28, 2017 11:04 AM
> > To: Heath Stewart<mailto:heaths at outlook.com>; WiX Toolset Developer
> > Mailing List<mailto:wix-devs at lists.wixtoolset.org>; Rob
> Mensching<mailto:
> > rob at firegiant.com>
> > Subject: RE: [wix-devs] Selection of compatible VS instances
> >
> > I'm not a fan of fail-by-default: If you don't author the dependency
> > data, the user runs the risk of failure and undesirable behavior. I'm
> > willing to consider that I'm being paranoid and if we document it, we
> > can wash our hands of the results. Rob? Sean? Anybody else?
> >
> > The WIP doesn't describe what I imagine to be a common scenario
> > (including WiX, if we use this solution): a VSIX v3 for Dev15/14 and
> > v1 for everything else (until we drop VS2010 support).
> >
> > From: Heath Stewart [mailto:heaths at outlook.com]
> > Sent: Friday, 27 January, 2017 17:42
> > To: Bob Arnson <bob at firegiant.com>; WiX Toolset Developer Mailing List
> > < wix-devs at lists.wixtoolset.org>; Rob Mensching <rob at firegiant.com>
> > Subject: RE: [wix-devs] Selection of compatible VS instances
> >
> > That we can’t nest MSIs that way, yes, an unfortunate bug but just how
> > MSI works. The install-on-demand is because VS2017 is much lighter
> > weight. The default install is small and quick (roughly equivalent to
> > VSCode). That extensions can install features they need was a
> > desirable feature almost from the start.
> >
> > I could do a warning if there are no dependencies authored, but we’d
> > have to know during build time it’s a VSIX v3 – in which case, we may
> > as well harvest the dependencies. I’m certainly open to doing that,
> > but may not be in the first merge (we have a few partners – internal
> > and external – that need unblocked). We certainly wouldn’t want to
> > warn for VSIX v2s, which I imagine – for now – most VSIX packages will
> > be. Or are you suggesting that in the interim? I have another of other
> > projects related to this on the docket (like vswhere.exe for batch
> > support, like cmake), so while harvesting IDs is important someone
> > else could also jump in with that if we need to get it done sooner.
> >
> > The error case isn’t great, but it’s also not horrible. If the package
> > was marked non-vital and didn’t fail the third-party install, when VS
> > is started it will find that the installation didn’t not complete and
> > prompt to repair it, which would put the product into the originally
> > requested state. We considered this when thinking about possibilities,
> > but decided the perception was bad. It is, but VS will prompt to put the
> product right.
> >
> > The WIP does actually call this out how downlevel is supported. The
> > /instanceIds switch is only added if we found instances (which means
> > it’s
> > Dev15+) and will overwrite the VSIX path variable that is otherwise
> > Dev15+still
> > set by AppSearch for Dev14-. VSIXInstaller.exe itself will install to
> > multiple versions. I’ve worked with their team to get
> > VSIXInstaller.exe doing as much as the work as possible, which is why
> > we can leave the existing VSIX CAs almost entirely as-is. Prior ideas
> > including scheduling the batch of typical CAs (install, rollback,
> > uninstall) per-package per-version but would be far more expensive to
> > develop, more prone to error, slower to install, and less declarative.
> >
> > Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for
> > Windows 10
> >
> > From: Bob Arnson<mailto:bob at firegiant.com>
> > Sent: Friday, January 27, 2017 2:29 PM
> > To: Heath Stewart<mailto:heaths at outlook.com>; WiX Toolset Developer
> > Mailing List<mailto:wix-devs at lists.wixtoolset.org>; Rob
> Mensching<mailto:
> > rob at firegiant.com>
> > Subject: RE: [wix-devs] Selection of compatible VS instances
> >
> > Ah, I see. It’s not a bug, it’s an “alternative feature.” :)
> >
> > Today, for VS2015, a package or bundle can do a registry search and
> > use the results in a launch condition, feature condition, or package
> > InstallCondition. The equivalent for VS2017 would be to detect whether
> > there are any compatible (with all necessary components and workloads)
> > instances installed. That ensures that there won’t be failures for
> > known reasons.
> >
> > As long as the immediate custom action (shared as a BA function) can
> > safely run early enough for launch conditions, feature conditions, and
> > install conditions, and the deferred CA only invokes VSIXinstaller for
> > compatible instances, then I’m +1. I think we need a warning (probably
> > an
> > error) if dependencies aren’t specified/harvested; it’s unacceptable
> > that you can end up in a scenario where stuff is accidentally
> > installed or that would fail because of a nested install.
> >
> > The WIP should describe how VsixPackage should be authored to support
> > multiple versions of VS, downlevel and 15+.
> >
> > From: Heath Stewart [mailto:heaths at outlook.com]
> > Sent: Friday, 27 January, 2017 12:45
> > To: Bob Arnson <bob at firegiant.com<mailto:bob at firegiant.com>>; WiX
> > Toolset Developer Mailing List <wix-devs at lists.wixtoolset.org<mailto:
> > wix-devs at lists.wixtoolset.org>>; Rob Mensching <rob at firegiant.com
> <mailto:
> > rob at firegiant.com>>
> > Subject: RE: [wix-devs] Selection of compatible VS instances
> >
> >
> > No, the install-on-demand feature is entirely intentional. When
> > installing from the Visual Studio gallery / extension manager – our
> > primary use case – everything works as designed. Are you saying that
> > if I do the work to support installing VSIX packages for VS2017 you
> > would not merge it into the shipping code?
> >
> >
> >
> > As a reminder called out in the WIP, if they author dependent workload
> > and/or components IDs (or they are otherwise harvested during build)
> > this “nested install” scenario won’t happen.
> >
> >
> >
> > Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for
> > Windows 10
> >
> >
> >
> > From: Bob Arnson<mailto:bob at firegiant.com>
> > Sent: Thursday, January 26, 2017 7:32 PM
> > To: WiX Toolset Developer Mailing List<mailto:wix-devs at lists.
> > wixtoolset.org>; Rob Mensching<mailto:rob at firegiant.com>
> > Subject: Re: [wix-devs] Selection of compatible VS instances
> >
> >
> > Merged.
> >
> > So, clearly, installing anything during the installation of an
> > extension was/is a bad idea. Has this issue now raised it to a design
> > bug that will be fixed for RTW? If not, I'm -1 on adding any MSI
> > support for VSIX packages to WiX, until it is fixed.
> >
> > For WiX itself, the ExePackage will suffice. The Chain element isn't
> > currently extensible but we could take a change for that, if someone
> > wanted to add VsixPackage for bundles.
> >
> > -----Original Message-----
> > From: wix-devs [mailto:wix-devs-bounces at lists.wixtoolset.org] On
> > Behalf Of Heath Stewart
> > Sent: Thursday, 26 January, 2017 19:02
> > To: Rob Mensching <rob at firegiant.com<mailto:rob at firegiant.com>>; WiX
> > Toolset Developer Mailing List <wix-devs at lists.wixtoolset.org<mailto:
> > wix-devs at lists.wixtoolset.org>>
> > Subject: Re: [wix-devs] Selection of compatible VS instances
> >
> > I've pushed another commit after we realized another a problem that
> > results in nested MSI installs (and across processes, so
> > MsiJoinTransaction can't work). We are discussing timing of a fix to
> > fail fast without machine changes, but for now I included a description
> in future considerations.
> > I'll be working from this WIP commit if no other feedback about the
> > implementation.
> >
> >
> >
> > One idea to mitigate potential nested MSI installs would be to allow
> > the compiler to parse extension elements for packages, with the intent
> > those are only transpilers. For example, the WixVSExtension could
> > support a vs:VsixPackage that just transpiles to an ExePackage, and
> > we'd ship (either next to WixVSExtension, or as an embedded resource
> > if we want to remain a single file) a small EXE that just finds the
> > VS2017+ VSIXInstaller.exe and forwards the command line. Seems this
> > could be generally useful to support other EXE installs for class of
> > installers and would require no changes to Burn. Things like progress
> > type could be automatically emitted if supported (it's feasible -
> > though no promises - our progress events could be adapted to the burn
> protocol).
> >
> >
> >
> > Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for
> > Windows 10
> >
> >
> >
> > From: Heath Stewart<mailto:heaths at outlook.com>
> > Sent: Wednesday, January 25, 2017 10:21 AM
> > To: Rob Mensching<mailto:rob at firegiant.com>; WiX Toolset Developer
> > Mailing List<mailto:wix-devs at lists.wixtoolset.org>
> > Subject: Re: [wix-devs] Selection of compatible VS instances
> >
> >
> >
> > If they don't author workloads or components, that's what would happen.
> > However, as the WIP calls out, VSIXInstaller.exe will actually install
> > all dependent workloads and components authored into the VSIX v3,
> > which probably won't make many end users happy. But, yes, it's
> > supported. I can emphasize that more and make sure I get that into the
> > documentation for the VsixDependency element.
> >
> >
> >
> > The default install of VS is very small and fast (actually, ever since
> > we dropped almost all MSIs even a nearly full install on my machine
> > took only about 20-30 minutes yesterday), so this change in behavior
> > for dependencies was necessary for a more ala carte model. The thing
> > to emphasize is the impact of NOT authoring (or harvesting - either
> > via heat and/or bind-time discovery like with file version info and
> size) dependencies.
> >
> >
> >
> > Sent from Mail<https://go.microsoft.com/fwlink/?LinkId=550986> for
> > Windows 10
> >
> >
> >
> > From: Rob Mensching<mailto:rob at firegiant.com>
> > Sent: Wednesday, January 25, 2017 6:07 AM
> > To: WiX Toolset Developer Mailing List<mailto:wix-devs at lists.
> > wixtoolset.org>
> > Subject: Re: [wix-devs] Selection of compatible VS instances
> >
> >
> >
> > Is there a way to have the easy solution that was kind of in the
> > original version where one just says, "Install my extension in all
> > Visual Studio
> > 2017 instances"?
> >
> > It might still be there but lost in the details.
> >
> >
> > -----Original Message-----
> > From: wix-devs [mailto:wix-devs-bounces at lists.wixtoolset.org] On
> > Behalf Of Heath Stewart
> > Sent: Wednesday, January 25, 2017 1:22 AM
> > To: WiX Toolset Developer Mailing List <wix-devs at lists.wixtoolset.org
> > <mailto:wix-devs at lists.wixtoolset.org>>
> > Subject: Re: [wix-devs] Selection of compatible VS instances
> >
> > Updated the WIP based on the design below:
> >
> >
> >
> > https://github.com/wixtoolset/web/pull/22
> > ____________________________________________________________________
> > WiX Toolset Developer Mailing List provided by FireGiant
> > http://www.firegiant.com/ ______________________________
> > ______________________________________
> > WiX Toolset Developer Mailing List provided by FireGiant
> > http://www.firegiant.com/ ______________________________
> > ______________________________________
> > WiX Toolset Developer Mailing List provided by FireGiant
> > http://www.firegiant.com/
> > ____________________________________________________________________
> > WiX Toolset Developer Mailing List provided by FireGiant
> > http://www.firegiant.com/
> > ____________________________________________________________________
> > WiX Toolset Developer Mailing List provided by FireGiant
> > http://www.firegiant.com/
> >
> ____________________________________________________________________
> WiX Toolset Developer Mailing List provided by FireGiant
> http://www.firegiant.com/
> ____________________________________________________________________
> WiX Toolset Developer Mailing List provided by FireGiant
> http://www.firegiant.com/
>


More information about the wix-devs mailing list