[wix-devs] Selection of compatible VS instances

Bob Arnson bob at firegiant.com
Sat Jan 28 11:04:07 PST 2017


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 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/


More information about the wix-devs mailing list