October 12th, 2017

New vswhere: now with more properties!

Heath Stewart
Principal Software Engineer

The latest release of vswhere now outputs additional properties as requested, along with catalog properties and a way to disambiguate nested properties – not that there are any currently. You can specify the nested properties followed by a property name like “properties/nickname”. Delimiters supported are “_”, “/”, and “.” to fit with the text, JSON, and XML formats. You can use any delimiter with any format, however.

The default output for an instance now looks like:

[
  {
    "instanceId": "890353f3",
    "installDate": "2017-09-16T01:24:28Z",
    "installationName": "VisualStudio/15.4.0+27004.2002",
    "installationPath": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise",
    "installationVersion": "15.4.27004.2002",
    "productId": "Microsoft.VisualStudio.Product.Enterprise",
    "productPath": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\Common7\\IDE\\devenv.exe",
    "isPrerelease": false,
    "displayName": "Visual Studio Enterprise 2017",
    "description": "Microsoft DevOps solution for productivity and coordination across teams of any size",
    "channelId": "VisualStudio.15.Release",
    "channelPath": "C:\\Users\\heaths\\AppData\\Local\\Microsoft\\VisualStudio\\Packages\\_Channels\\4CB340F5\\catalog.json",
    "channelUri": "https://aka.ms/vs/15/release/channel",
    "enginePath": "C:\\Program Files (x86)\\Microsoft Visual Studio\\Installer\\resources\\app\\ServiceHub\\Services\\Microsoft.VisualStudio.Setup.Service",
    "releaseNotes": "https://go.microsoft.com/fwlink/?LinkId=660692#15.4.0",
    "thirdPartyNotices": "https://go.microsoft.com/fwlink/?LinkId=660708",
    "catalog": {
      "buildBranch": "d15svc",
      "buildVersion": "15.4.27004.2002",
      "id": "VisualStudio/15.4.0+27004.2002",
      "localBuild": "build-lab",
      "manifestName": "VisualStudio",
      "manifestType": "installer",
      "productDisplayVersion": "15.4.0",
      "productLine": "Dev15",
      "productLineVersion": "2017",
      "productMilestone": "RTW",
      "productMilestoneIsPreRelease": "False",
      "productName": "Visual Studio",
      "productPatchVersion": "0",
      "productPreReleaseMilestoneSuffix": "6.0",
      "productRelease": "RTW",
      "productSemanticVersion": "15.4.0+27004.2002"
    },
    "properties": {
      "campaignId": "844478574.1505524861",
      "channelManifestId": "VisualStudio.15.Release/15.4.0+27004.2002",
      "nickname": "",
      "setupEngineFilePath": "C:\\Program Files (x86)\\Microsoft Visual Studio\\Installer\\vs_installershell.exe"
    }
  }
]

Most of the properties are provided through the ISetupPropertyStore. This interface is implemented by ISetupInstance objects, and provided by ISetupInstance2::GetProperties for custom properties. Starting with Visual Studio 2017 Update 3, you can also get catalog properties by calling IUnknown::QueryInterface on an ISetupInstance object for ISetupInstanceCatalog, which also provides an ISetupPropertyStore from ISetupInstanceCatalog::GetProperties. As we add new features that require persisting properties, they will automatically be exposed.

Author

Heath Stewart
Principal Software Engineer

Heath is an application architect and developer, looking to help educate others to learn professional development. Besides designing and developing applications he enjoys writing about intermediate and advanced topics. Heath also consults for deployment packages and scenarios within Microsoft and for external customers.

1 comment

Discussion is closed. Login to edit/delete existing comments.

  • pete dashwood

    I believe vswhere is a good tool and long overdue. But there are some pretty basic things it misses. If I have a client with multiple side-by-side versions installed,there are 2 main things I need to know:
    1. installationVersion   -which version is it
    2. productPath            -the full path to the executable (so I can start it up from my application).
    Sadly, although it returns comprehensive data for Community versions...

    Read more