public static void Query() { ISetupConfiguration query = new SetupConfiguration(); ISetupConfiguration2 query2 = (ISetupConfiguration2)query; IEnumSetupInstances e = query2.EnumAllInstances(); int pceltFetched; ISetupInstance2[] rgelt = new ISetupInstance2[1]; StringBuilder log = new StringBuilder(); while (true) { e.Next(1, rgelt, out pceltFetched); if (pceltFetched <= 0) { Console.WriteLine(String.Format("{{\"log\":\"{0}\"}}", log.ToString())); return; } if (CheckInstance(rgelt[0], ref log)) { return; } } }
public static SetupInstance GetSetupInstance() { SetupInstance instance = null; #pragma warning disable CS0219 // Variable is assigned but its value is never used int exHResult = 0; #pragma warning restore CS0219 // Variable is assigned but its value is never used ISetupConfiguration2 configuration = SetupEnvironment.GetQuery(); IEnumSetupInstances enumerator = configuration.EnumAllInstances(); int fetched; ISetupInstance[] instances = new ISetupInstance[1]; do { enumerator.Next(1, instances, out fetched); if (fetched > 0) { instance = SetupInstance.From((ISetupInstance2)instances[0]); break; } }while (fetched > 0); { exHResult = 0; } return(instance); }
public static List <VSInstance> QueryEx(params string[] args) { List <VSInstance> insts = new List <VSInstance>(); ISetupConfiguration query = new SetupConfiguration(); ISetupConfiguration2 query2 = (ISetupConfiguration2)query; IEnumSetupInstances e = query2.EnumAllInstances(); ISetupInstance2[] rgelt = new ISetupInstance2[1]; int pceltFetched; e.Next(1, rgelt, out pceltFetched); while (pceltFetched > 0) { ISetupInstance2 raw = rgelt[0]; insts.Add(ParseInstance(raw)); e.Next(1, rgelt, out pceltFetched); } foreach (VSInstance inst in insts.ToArray()) { foreach (string key in args) { if (!inst.JSONBool(key)) { insts.Remove(inst); } } if (Array.IndexOf(args, "Packages") == -1) { inst.Remove("Packages"); } } return(insts); }
public static void PrintJson() { ISetupConfiguration query = new SetupConfiguration(); ISetupConfiguration2 query2 = (ISetupConfiguration2)query; IEnumSetupInstances e = query2.EnumAllInstances(); int pceltFetched; ISetupInstance2[] rgelt = new ISetupInstance2[1]; List <string> instances = new List <string>(); while (true) { e.Next(1, rgelt, out pceltFetched); if (pceltFetched <= 0) { Console.WriteLine(String.Format("[{0}]", string.Join(",", instances.ToArray()))); return; } try { instances.Add(InstanceJson(rgelt[0])); } catch (COMException) { // Ignore instances that can't be queried. } } }
/// <inheritdoc/> protected override void BeginProcessing() { query = QueryFactory.Create(); if (query == null) { WriteWarning(Resources.NotRegistered); } }
private IVsVersionProvider CreateTestSubject(IVsShell vsShell, ISetupConfiguration2 setupConfiguration, ILogger logger = null) { logger ??= Mock.Of <ILogger>(); var setupConfigurationProvider = new Mock <ISetupConfigurationProvider>(); setupConfigurationProvider.Setup(x => x.Get()).Returns(setupConfiguration); return(new VsVersionProvider(CreateServiceProvider(vsShell), setupConfigurationProvider.Object, logger)); }
private static List <ISetupInstance> GetVisualStudioInstances() { List <ISetupInstance> vsInstances = new(); try { SetupConfiguration setupConfiguration = new(); ISetupConfiguration2 setupConfiguration2 = setupConfiguration; IEnumSetupInstances setupInstances = setupConfiguration2.EnumInstances(); ISetupInstance[] instances = new ISetupInstance[1]; int fetched = 0; do { setupInstances.Next(1, instances, out fetched); if (fetched > 0) { ISetupInstance2 instance = (ISetupInstance2)instances[0]; // .NET Workloads only shipped in 17.0 and later and we should only look at IDE based SKUs // such as community, professional, and enterprise. if (Version.TryParse(instance.GetInstallationVersion(), out Version version) && version.Major >= 17 && s_visualStudioProducts.Contains(instance.GetProduct().GetId())) { vsInstances.Add(instances[0]); } } }while (fetched > 0); } catch (COMException e) when(e.ErrorCode == REGDB_E_CLASSNOTREG) { // Query API not registered, good indication there are no VS installations of 15.0 or later. // Other exceptions are passed through since that likely points to a real error. } return(vsInstances); }
/// <inheritdoc/> protected override void EndProcessing() { // Release the COM object and its resources ASAP. query = null; }