Exemplo n.º 1
0
        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;
                }
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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.
                }
            }
        }
Exemplo n.º 5
0
 /// <inheritdoc/>
 protected override void BeginProcessing()
 {
     query = QueryFactory.Create();
     if (query == null)
     {
         WriteWarning(Resources.NotRegistered);
     }
 }
Exemplo n.º 6
0
        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));
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
 /// <inheritdoc/>
 protected override void EndProcessing()
 {
     // Release the COM object and its resources ASAP.
     query = null;
 }